Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
題目的意思是:給出一組字串,按組返回擁有相同變位詞的字串
解題思路是:
對單詞中得字母排序,如果排序後的單詞是一樣的,那麼我們可以判定這兩個單詞有相同的變位詞。
- 首先,求出每個單詞的變位詞,以變位詞作為鍵插入雜湊表中,值為一個連結串列。
- 然後,把該單詞附在這個連結串列末端。
- 最後,遍歷雜湊表的值,輸出長度大於1的字串
class Solution { public: vector<string> anagrams(vector<string> &strs){ unordered_map<string, vector<int> > hash_map; for(int i = 0 ; i < strs.size(); ++ i){ string s = strs[i]; sort(s.begin(),s.end()); if(hash_map.find(s) != hash_map.end()){ vector<int> a = hash_map[s]; a.push_back(i); hash_map[s] = a; }else{ vector<int> a; a.push_back(i); hash_map.insert(make_pair(s,a)); } } vector<string> res; for(unordered_map<string,vector<int> >::iterator iter = hash_map.begin(); iter!= hash_map.end();++iter){ vector<int> a = iter->second; if(a.size() > 1){ for(int i = 0 ; i < a.size(); ++ i){ res.push_back(strs[a[i]]); } } } return res; } };