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

 

posted @ 2016-09-05 22:51  wangxiaobao1114  阅读(158)  评论(0编辑  收藏  举报