给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。
字母异位词是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [“”]
输出: [[“”]]
示例 3:
输入: strs = [“a”]
输出: [[“a”]]
核心思路:
使用unordered_map(哈希表)将排序后的字符串映射到一个字符串列表中。哈希表的键是排序后的字符串,值是所有与该键对应的原始字符串组成的列表。
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <algorithm>using namespace std;class Solution
{
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> anagrams;for (const auto& s : strs){string sort_str = s;sort(sort_str.begin(), sort_str.end());// 建立哈希映射anagrams[sort_str].push_back(s);}// 返回结果vector<vector<string>> result;for (auto& pair : anagrams){result.push_back(pair.second);}return result;}
};
int main()
{Solution sol;vector<string> strs1 = { "eat", "tea", "tan", "ate", "nat", "bat" };vector<vector<string>> result1 = sol.groupAnagrams(strs1);// 打印结果cout << "示例 1 结果:" << endl;for (const auto& group : result1) {for (const auto& word : group) {cout << word << " ";}cout << endl;}return 0;
}