Leetcode刷题

刷!

字母异位词分组

题目

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 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;
    }
}
Licensed under CC BY-NC-SA 4.0