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会代码更简单。
相关文章推荐
- LeetCode Exercise 16:证明NP完全问题
- LeetCode Exercise 6: Remove Element
- LeetCode Exercise 2: Remove Duplicates from Sorted Array
- LeetCode Exercise 5: Trapping Rain Water
- leetcode-25-exercise_string&array
- LeetCode Exercise 8: Remove Nth Node From End of List
- Leetcode Exercise
- LeetCode Exercise 14: Maximal Square
- LeetCode Exercise 10: Merge Intervals
- Group Anagrams(leetcode)
- leetcode-26-exercise_linked-list
- LeetCode Exercise 17:01 Matrix
- leetcode-27-exercise_bit maniputation
- leetcode 49:Group Anagrams
- LeetCode Exercise 3: Longest Substring Without Repeating Characters
- leetcode-24-exercise
- LeetCode Exercise 15: Summary Ranges
- Leetcode Exercise
- LeetCode Exercise 13: Contains Duplicate III
- Leetcode Exercise 1:Two Sum + Three Sum