leetcode49.字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。


示例:

1
2
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]


分析:

1
统计每个字符串的字符数组,相等则为同一类

代码

  • C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>> cnt; // 分类数组
vector<pair<string, string>> f; // 统计字符数组

for (auto& s : strs) {
string t('0', 26);
for (int i = 0;i < s.size();i ++)
t[(s[i] - 'a')] = t[(s[i] - 'a')] - '0' + 1;
f.push_back({s, t});
}

for (int i = 0;i < f.size();i ++) {
cnt[f[i].second].emplace_back(f[i].first);
}

vector<vector<string>> res;
for (auto& [k, v] : cnt) {
res.push_back(v);
}

return res;

}
};

[原题链接](49. 字母异位词分组 - 力扣(Leetcode))

0%