思路
核心思路:使用排序后的字符串作為鍵,將原始字符串分組
- 鍵的選擇:對于每個字符串,將其排序后得到標準形式作為鍵
- 分組存儲:使用哈希表,鍵是排序后的字符串,值是對應的原始字符串列表
- 結果構建:遍歷哈希表,將每個分組添加到結果中
實現分析
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {// 步驟1:創建哈希表,鍵是排序后的字符串,值是原始字符串列表unordered_map<string, vector<string>> mp;// 步驟2:遍歷所有字符串for(auto& str : strs) {string key = str; // 復制原字符串sort(key.begin(), key.end()); // 排序得到標準鍵mp[key].emplace_back(str); // 將原字符串添加到對應分組}// 步驟3:構建結果vector<vector<string>> ans;for(auto it = mp.begin(); it != mp.end(); it++) {ans.emplace_back(it->second); // 將每個分組添加到結果中}return ans;}
};
1. 哈希表初始化
unordered_map<string, vector<string>> mp;
- 鍵(key):排序后的標準字符串
- 值(value):具有相同字母組成的原始字符串列表
2. 處理每個字符串
for(auto& str : strs) {string key = str; // 創建副本sort(key.begin(), key.end()); // 排序得到標準鍵mp[key].emplace_back(str); // 分組存儲
}
- 對于
"eat"
:排序后key = "aet"
,存儲["eat"]
- 對于
"tea"
:排序后key = "aet"
,存儲["eat", "tea"]
- 對于
"tan"
:排序后key = "ant"
,存儲["tan"]
3. 構建結果
vector<vector<string>> ans;
for(auto it = mp.begin(); it != mp.end(); it++) {ans.emplace_back(it->second);
}
- 將哈希表中的每個值(字符串列表)添加到結果中