Leetcode 791. 自定義字符串排序 791. Custom Sort String

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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章