Problem: 49. 字母异位词分组
题目描述
思路及解法
1.以字符串作为键,与该键是字母异位词所组成的数组为值创建map集合;
2.每次取出一个字符串将其排序,再存入对应的数组;
3.将map中的值存入到一个二维组数中并返回;
复杂度
时间复杂度:
O ( n × m l o g m ) O(n\times mlogm) O(n×mlogm);其中 n n n为字符串的个数, m m m为所有字符串中最长的字符个数
空间复杂度:
O ( n ) O(n) O(n)
Code
class Solution {
/**
* Hash
*
* @param strs Given string
* @return vector<vector<string>>
*/
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<>();
for (String str : strs) {
char[] charArray = str.toCharArray();
Arrays.sort(charArray);
String key = new String(charArray);
if (!map.containsKey(key)) {
map.put(key, new ArrayList<>());
}
map.get(key).add(str);
}
return new ArrayList<>(map.values());
}
}