刷!
字母异位词分组
题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [[“a”]]
题意就是一个单词里面所有字母都相同的就是字母异位词
解法:
题目要求返回格式是List<List>,那么每个字母异位词都要放入List里面
可以通过给字符串排序,然后判断这个字符串是否和其他字符串相等来判断字母异位词
可以使用Char[] arr=string.toCharArray();函数来将String转为Char[]类型,然后用Arrays.sort()进行排序.
互相比较很麻烦,所以我们使用HashMap数据结构
Map<String,List>
其中String是排完序后的Char[]转为的String,用String str=new String(arr);来获取
如果有这个key,就直接在map.get(key)里面add(str)
如果没有这个key,就新建一个List,一定要加入排序好的str
最后return的时候要遍历map获取所有List
使用for-each
1
2
3
4
5
|
List<List<String>> result = new ArrayList<>();
for(List<String> list:map.values()){
ans.add(list);
}
return ans;
|
完整版代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>> map=new HashMap<>();
for(int i=0;i<strs.length;i++){
String string=strs[i];
char[] arr=string.toCharArray();
Arrays.sort(arr);
String str=new String(arr);
if(map.containsKey(str)){
map.get(str).add(string);
}else{
List<String> list=new ArrayList<>();
list.add(string);
map.put(str,list);
}
}
List<List<String>> result = new ArrayList<>();
for (List<String> list : map.values()) {
result.add(list);
}
return result;
}
}
|