首页 > 代码库 > LeetCode49 Group Anagrams

LeetCode49 Group Anagrams

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 };

 

LeetCode49 Group Anagrams