791. 自定義字符串排序
字符串S和 T 只包含小寫字符。在S中,所有字符只會出現一次。
S 已經根據某種規則進行了排序。我們要根據S中的字符順序對T進行排序。更具體地說,如果S中x在y之前出現,那麼返回的字符串中x也應出現在y之前。
返回任意一種符合條件的字符串T。
示例:
輸入:
S = “cba”
T = “abcd”
輸出: “cbad”
解釋:
S中出現了字符 “a”, “b”, “c”, 所以 “a”, “b”, “c” 的順序應該是 “c”, “b”, “a”.
由於 “d” 沒有在S中出現, 它可以放在T的任意位置. “dcba”, “cdba”, “cbda” 都是合法的輸出。
注意:
S的最大長度爲26,其中沒有重複的字符。
T的最大長度爲200。
S和T只包含小寫字符。
突然想到的方法,效率還不錯。
class Solution {
public:
string customSortString(string S, string T) {
map<char,int> m;
string res;
for(int i=0;i<T.size();i++){ //對T計數,每個字母出現的次數
if(m.count(T[i])) m[T[i]]++;
else m[T[i]]=1;
}
for(int i=0;i<S.size();i++){ //按照S的順序,輸出每個字母對應的次數個
if(m.count(S[i])){
int k=m[S[i]];
m[S[i]]=0; //有S中沒有出現的,所以將計算過的置0
while(k>0){
res+=S[i];
k--;
}
}
}
for(int i=0;i<26;i++){ //不想遍歷map,就遍歷26個字母吧;
char c='a'+i; //現在還不是零的,是S中沒有的,直接加在後面
if(m.count(c)){
int k=m[c];
while(k>0){
res+=c;
k--;
}
}
}
return res;
}
};