題目地址:
https://leetcode.com/problems/custom-sort-string/
給定兩個字符串和,其中定義了一種字符的順序,也即出現在前的要先於出現在後的。要求將按照上述順序排序。中若有字母不在裏則擺放隨意。題目保證兩個字符串只含英文小寫字母。
思路是先統計中出現了哪些字母,各自出現了多少次,然後再遍歷,依次將中的對應字母按順序加在一個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();
}
}
時空複雜度。