day_10——LeetCode 49:字母異位詞分組

Day_10 —— LeetCode練習題:字母異位詞分組

49. 字母異位詞分組

給定一個字符串數組,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字符串。

示例:

輸入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
輸出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string, int> m;
        vector<vector<string>> res;
        for(string s:strs){
            string x(s);
            sort(x.begin(), x.end());
            if(!m.count(x)) {
                m[x] = res.size();
                res.push_back({});
            }
            res[m[x]].push_back(s);
        }
        return res;
    }
};

這道題讓我們羣組給定字符串集中所有的錯位詞,所謂的錯位詞就是兩個字符串中字母出現的次數都一樣,只是位置不同,比如 abc,bac, cba 等它們就互爲錯位詞,那麼如何判斷兩者是否是錯位詞呢,可以發現如果把錯位詞的字符順序重新排列,那麼會得到相同的結果,所以重新排序是判斷是否互爲錯位詞的方法,由於錯位詞重新排序後都會得到相同的字符串,以此作爲 key,將所有錯位詞都保存到字符串數組中,建立 key 和當前的不同的錯位詞集合個數之間的映射,這裏之所以沒有建立 key 和其隸屬的錯位詞集合之間的映射,是用了一個小 trick,從而避免了最後再將 HashMap 中的集合拷貝到結果 res 中。當檢測到當前的單詞不在 HashMap 中,此時知道這個單詞將屬於一個新的錯位詞集合,所以將其映射爲當前的錯位詞集合的個數,然後在 res 中新增一個空集合,這樣就可以通過其映射值,直接找到新的錯位詞集合的位置,從而將新的單詞存入結果 res 中。

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