LeetCode 49. Group Anagrams
原题链接
简单
作者:
YC.
,
2021-03-02 15:51:25
,
所有人可见
,
阅读 313
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
// 4、边界
if (strs.empty()) {
return vector<vector<string>>{};
}
// 1、将每个字母按字典序将字符排列一把
vector<string> tempStrVec(strs.begin(), strs.end()); // 为了不改变原来的数组,因此新构造一个
GetOrderedVec(tempStrVec);
// 2、将字母丢到一个map表里面去,记录位置
map<string, vector<int>> wordsMap;
FindSameWordsPos(tempStrVec, wordsMap);
// 3、遍历一把,存储起来
vector<vector<string>> res;
GetResult(strs, wordsMap, res);
return res;
}
void GetOrderedVec(vector<string>& strs) {
for (auto& words : strs) {
sort(words.begin(), words.end());
}
}
void FindSameWordsPos(const vector<string>& strs, map<string, vector<int>>& wordsMap) {
for (int i = 0; i < strs.size(); ++i) {
string words = strs[i];
wordsMap[words].emplace_back(i);
}
}
void GetResult(const vector<string>& strs, const map<string, vector<int>>& wordsMap, vector<vector<string>>& res) {
for (auto& words : wordsMap) {
vector<string> tempRes;
for (const auto pos : words.second) {
tempRes.emplace_back(strs[pos]);
}
res.emplace_back(tempRes);
}
};
};