您的位置:首页 > 其它

LeetCode 49 Group Anagrams

2017-05-25 19:59 357 查看
题意:

如果两个单词由相同字母数组成那么它们应该分成一组,求给出单词的分组。

思路:

为每个单词做字母计数,然后根据计数排序,这样相同字母组成的单词就会挨在一起,最后按顺序分下组就行了。

代码:

#define N 26

class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string> &strs) {
int n = strs.size();
node f
;
for (int i = 0; i < n; ++i) {
f[i].index = i;
for (int j = 0; j < N; ++j) {
f[i].count[j] = 0;
}
for (int j = 0; j < strs[i].size(); ++j) {
++f[i].count[(int) strs[i][j] - 'a'];
}
}
sort(f, f + n);
vector<vector<string>> ans;
for (int i = 0; i < n;) {
vector<string> part;
part.push_back(strs[f[i].index]);
bool isbreak = false;
for (int j = i + 1; j < n; ++j) {
if (f[i] == f[j]) {
part.push_back(strs[f[j].index]);
} else {
isbreak = true;
i = j;
break;
}
}
ans.push_back(part);
if (!isbreak) {
break;
}
}
return ans;
}

private:
struct node {
int index;
int count
;

bool operator<(const node ff) const {
for (int i = 0; i < N; ++i) {
if (count[i] != ff.count[i]) {
return count[i] < ff.count[i];
}
}
return false;
}

bool operator==(const node ff) const {
for (int i = 0; i < N; ++i) {
if (count[i] != ff.count[i]) {
return false;
}
}
return true;
}
};
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: