题目描述
描述:编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。
注意:本题相对原题稍作修改
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
解题思路
思路1:最直观的想法是,使用umap来存储(字符串中小写字母出现次数字符串,字符串集合)。首先遍历字符串集合,使用小写字母出现次数字符串来统计该字符串中26个小写字母出现的次数,接着将其存储在umap中,最后遍历umap,并将其元素的second部分依次加入结果数组中。
vector<vector<string>> groupAnagrams(vector<string>& strs)
{
vector<vector<string>> res;
unordered_map<string,vector<string>> umap;
for(auto& str:strs)
{
//存放字符串中26个小写字母出现的次数
string c(26,'0');
//统计次数
for(auto& ch:str)
c[ch-'a']++;
//加入umap中
umap[c].push_back(str);
}
//依次加入res中
for(auto& u:umap)
res.push_back(u.second);
return res;
}
总结:使用一个长度为26的字符串来存放字符串中各个小写字母出现的次数,再用umap来存储小写字母出现次数字符串与对应的字符串,真的好巧妙!!!