Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:
[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]
Note: All inputs will be in lower-case. (Medium)
分析:
一个简单的思路,就是把每个string赋上其在数组中的位置组成一个结果(保留位置信息)。
然后对每个string排序,再对所有string以字典序排序使得一样的string相邻。
最后走一遍循环, 把一样的string对应的原vector中的string添加到结果中即可。
代码:
1 class Solution { 2 struct node{ 3 string str; 4 int num; 5 node(string s, int n):str(s),num(n){} 6 bool operator< (const node& n2) const{ 7 return str < n2.str; 8 } 9 }; 10 public: 11 vector<vector<string>> groupAnagrams(vector<string>& strs) { 12 vector<node> v; 13 for (int i = 0; i < strs.size(); ++i) { 14 v.push_back(node(strs[i],i)); 15 } 16 for (int i = 0; i < v.size(); ++i) { 17 sort(v[i].str.begin(), v[i].str.end()); 18 } 19 sort(v.begin(), v.end()); 20 vector<vector<string>> result; 21 vector<string> temp; 22 temp.push_back(strs[v[0].num]); 23 for (int i = 1; i < v.size(); ++i) { 24 if (v[i].str == v[i - 1].str) { 25 temp.push_back(strs[v[i].num]); 26 } 27 else { 28 result.push_back(temp); 29 temp.clear(); 30 temp.push_back(strs[v[i].num]); 31 } 32 } 33 result.push_back(temp); 34 return result; 35 } 36 };