您的位置:首页 > 其它

LeetCode Exercise 7: Group Anagrams

2017-10-25 23:00 127 查看

题名:Group Anagrams

难度:Medium

题目描述:



题目分析:

anagram:由颠倒字母顺序而构成的字,题意很容易懂,就是找出所有组成字母一样的字符串。但乍一看好像很麻烦的样子,如果把每一个string都与其它string对比再分类的话,时间复杂度很高。这些字符串有什么共同点呢?前面说了,它们的组成字母相同,如果可以将这些组成字母作为一个个的tag,来给这些字符串分组的话,问题就很容易解决了。这时候就要想到图——map这个容器了,简直是为这个题目量身定做的!我们可以把string排序(利用sort函数)作为图的key,之后对号入座就行了。

代码如下:

class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
typedef map<string, vector<string>> MAP;
typedef vector<string> VS;
MAP anagrams;

for(int i = 0; i < strs.size(); i++){
string s = strs[i];
sort(s.begin(), s.end());     //给string排序,得到key值

MAP::iterator it = anagrams.find(s);
if(it == anagrams.end()){     //新元素
VS v;
anagrams.insert(MAP::value_type(s, v));   //s作为新的key,加入map中
}
it = anagrams.find(s);         //将strs[i]作为value添加至对应的组中
it->second.push_back(strs[i]);
}

vector<VS> ana;
MAP::iterator iter;
for(iter = anagrams.begin(); iter != anagrams.end(); ++iter){
ana.push_back(iter->second);
}
return ana;
}
};


新得体会:

用java会代码更简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: