leetcode每日一题-49:字母异位词分组
链接
字母异位词分组
题目
分析
不同的字母字节分组是比较难的,但是我们可以对每个字符串转化到一个中间态,然后根据中间态进行分组就容易了许多,接下来的问题是如何定义中间态,我们定义字符串中字符从小到大排列是中间态。
代码
C++
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>> m;
for(auto& s : strs)
{
string t = s;
sort(t.begin(), t.end());
m[t].push_back(s);
}
vector<vector<string>> res;
for(auto& x : m) res.push_back(x.second);
return res;
}
};
Java
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<String, List<String>>();
for (String str : strs) {
char[] array = str.toCharArray();
Arrays.sort(array);
String key = new String(array);
List<String> list = map.getOrDefault(key, new ArrayList<String>());
list.add(str);
map.put(key, list);
}
return new ArrayList<List<String>>(map.values());
}
}
作者:LeetCode-Solution