给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
所有输入均为小写字母。不考虑答案输出的顺序。
思路:这个题的思路非常清晰,遍历字符串数组,对其中每一个字符串进行排序,之后如果遇到相等的字符串,就说明出现字母易位词。
1、找字母易位词的过程用哈希表,每当出现一个新的字母易位词,就往re中添加一个空vector,并且将该vector在re中的索引值k,存成该字母易位词在哈希表中的value值,并且在re[k]中push_back该词。
2、每当出现一个已存在的字母易位词,在re[k]中push_back即可。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<string> s=strs;
vector<vector<string> > re;
unordered_map<string, int>m;
int k=0;
for(int i=0; i<s.size(); ++i){
sort(s[i].begin(), s[i].end());
if(!m.count(s[i])){
m[s[i]]=k++;
re.push_back({});
}
re[m[s[i]]].push_back(strs[i]);
}
return re;
}
};