【LeetCode】49. 字母异位词分组
题目链接

题目解析
找到不同排列但字符种类与个数一致的字符串并进行归类
有两种方法:
- 每个字符串都排序,这样一样的就会出来
O(nlogn) - 遍历字符串,使用
字符+个数的形式进行编码,可以表现出唯一编码O(n)
再使用哈希容器进行记录,即可
第二个方法编码出来的key长度是远小于字符串的长度,而快排出来的关键字就是字符串
总体来说,第二个方法要更优秀
代码
class Solution {
public:string str2code(string& str) {string code = "";int arr[26] = {0};for (auto& e : str) {arr[e - 'a'] += 1;}for (int i = 0; i < 26; i++) {if (arr[i] == 0)continue;code.append(string(1, 'a' + i) + to_string(arr[i]));}return code;}vector<vector<string>> groupAnagrams(vector<string>& strs) {int str_len = strs.size();if (str_len == 1)return vector<vector<string>>(1, strs);unordered_map<string, vector<int>> str_dict;vector<vector<string>> ret;for (int i = 0; i < str_len; i++) {string code = str2code(strs[i]);if (str_dict.find(code) == str_dict.end()) {str_dict.emplace(make_pair(code, vector<int>(1,i)));} else {str_dict[code].push_back(i);}}for (const auto& e : str_dict) {vector<string> tmp;for (auto idx : e.second) {tmp.push_back(strs[idx]);}ret.push_back(tmp);}return ret;}
};
