题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例:
输入:
s
t
r
s
=
[
"
e
a
t
"
,
"
t
e
a
"
,
"
t
a
n
"
,
"
a
t
e
"
,
"
n
a
t
"
,
"
b
a
t
"
]
strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
strs=["eat","tea","tan","ate","nat","bat"]
输出:
[
[
"
b
a
t
"
]
,
[
"
n
a
t
"
,
"
t
a
n
"
]
,
[
"
a
t
e
"
,
"
e
a
t
"
,
"
t
e
a
"
]
]
[["bat"],["nat","tan"],["ate","eat","tea"]]
[["bat"],["nat","tan"],["ate","eat","tea"]]
思路
- 关键是哈希值怎么取
- 方法一:对每个 s t r i n g string string 排序,将排好序的 s t r i n g string string 作为 k e y key key
代码
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
map<string, int> maps;
vector<vector<string>> ret;
int ret_ind = 0;
int n = strs.size();
for(int i = 0; i < n; i++){
int len = strs[i].length();
string temp_str = strs[i];
sort(temp_str.begin(), temp_str.end());
// for(int j = 0; j < len; j++){
// key += temp_str[j]*(j*10+1);
// }
if(maps.find(temp_str) == maps.end()){
maps[temp_str] = ret_ind;
ret_ind++;
vector<string> temp;
temp.push_back(strs[i]);
ret.push_back(temp);
}
else{
ret[maps[temp_str]].push_back(strs[i]);
}
}
return ret;
}
};