【题目】
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
【思路】
字母异位词,说明字符串中所有的字母及其个数完全一样。
可以使用字典,字典的key为排序后的字符串,value为原始字符串的数组。
遍历每个字符串,得到其排序后的字符串,将其加入到字典中,最后返回字典的所有value。
【代码】
python版本
class Solution(object):
def groupAnagrams(self, strs):
"""
:type strs: List[str]
:rtype: List[List[str]]
"""
d = {}
for s in strs:
s_sort = ''.join(sorted(s))
if s_sort not in d:
d[s_sort] = []
d[s_sort].append(s)
return list(d.values())
C++版本
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res;
map<string, vector<string>> d;
for(auto str: strs){
string tmp = str;
sort(tmp.begin(), tmp.end());
d[tmp].push_back(str);
}
map<string, vector<string>>::iterator it;
for(it=d.begin(); it!=d.end(); it++){
res.push_back(it->second);
}
return res;
}
};