題目:
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
解題:
這題目真心沒說明白,看別人博客才懂的題意,看懂以後基本就可以搞了。
我直接兩個map搞
第一次把單詞映射到排序後的單詞,第二次把排序後的單詞映射成數字,每映射成數字一次,數字+1。
最後輸出兩次map後大於1的即可
代碼:
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
int nr[strs.size()];
memset(nr, 0, sizeof(nr));
map<string, string> mp;
map<string, int> mpCnt;
for(int i = 0; i < strs.size(); i ++) {
string tmp = strs[i];
sort(tmp.begin(), tmp.end());
mp[strs[i]] = tmp;
if(mpCnt.find(tmp) == mpCnt.end())
mpCnt[tmp] = 1;
else
mpCnt[tmp] ++;
}
vector<string> ans;
for(int i = 0; i < strs.size(); i ++) {
if(mpCnt[mp[strs[i]]] > 1)
ans.push_back(strs[i]);
}
return ans;
}
};