【Leetcode】791. Custom Sort String

題目地址:

https://leetcode.com/problems/custom-sort-string/

給定兩個字符串SSTT,其中SS定義了一種字符的順序,也即出現在前的要先於出現在後的。要求將TT按照上述順序排序。TT中若有字母不在TT裏則擺放隨意。題目保證兩個字符串只含英文小寫字母。

思路是先統計TT中出現了哪些字母,各自出現了多少次,然後再遍歷SS,依次將TT中的對應字母按順序加在一個StringBuilder後面,最後返回即可。代碼如下:

public class Solution {
    public String customSortString(String S, String T) {
        if (S == null || S.isEmpty() || T == null || T.isEmpty()) {
            return T;
        }
        
        int[] letters = new int[26];
        for (int i = 0; i < T.length(); i++) {
            letters[T.charAt(i) - 'a']++;
        }
        
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < S.length(); i++) {
            if (letters[S.charAt(i) - 'a'] > 0) {
                while (letters[S.charAt(i) - 'a'] > 0) {
                    sb.append(S.charAt(i));
                    letters[S.charAt(i) - 'a']--;
                }
            }
        }
        
        for (int i = 0; i < letters.length; i++) {
            if (letters[i] > 0) {
                while (letters[i] > 0) {
                    sb.append((char) ('a' + i));
                    letters[i]--;
                }
            }
        }
        
        return sb.toString();
    }
}

時空複雜度O(n)O(n)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章