string-49. Group Anagrams

題目描述:

Given an array of strings, group anagrams together.

For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
Return:

[
  ["ate", "eat","tea"],
  ["nat","tan"],
  ["bat"]
]

題目解析:

1.本題的意思是在一個string的arr中,對所有的單詞進行分組,要求同一組單詞的size、字符以及出現次數相同就可以分爲同一組,否則在不同組。
2. 解決此問題時:考慮到單詞中字符順序不同,可以:先對單詞str內部進行排序爲temp;然後在輔助map中進行查找temp,找不到說明之前沒出現過,則開闢一個新的分組存入結果集,並將<temp,當前單詞在結果集中索引>作爲一個pair存入map,找到的話直接根據索引將單詞str存入結果集中對應索引處即可。
3. 這中解法簡單易懂,但是對每個單詞會有一個排序的動作。並且需要一些輔助內容map。

代碼如下:

class Solution {
public:
    // 是判斷的時候對每個單詞進行排序,然後將每個新出現的單詞和在結果集中的索引放入一個map中進行查找
    vector<vector<string>> groupAnagrams(vector<string>& strs)
    {
       
       vector<vector<string>> out;
        map<string, int> m;
        for(int i=0; i<strs.size(); ++i)
        {
            string s = strs[i];
            // 排序之後,字符一樣但是順序不一樣的單詞都會變爲一樣
            sort(s.begin(), s.end());
            if(m.find(s) != m.end())
                out[m[s]].push_back(strs[i]);
            else
            {
                vector<string>temp(1, strs[i]);
                out.push_back(temp);
                m[s] = out.size()-1;
            }
        }
        
        return out;
    }
};

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