问题描述
给定一个字符串数组,要求将其进行分组,分组规则:同一个字符串所组成的字母相同则分为一组。题目链接:**点我**
样例输入输出
输入:[“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出:
[
[“ate”,”eat”,”tea”],
[“nat”,”tan”],
[“bat”]
]
问题解法
首先用一个 map 来存储各个组别,其中 key 是组中的某个元素的字符排序得到的字符串,value 是组中的所有元素。然后遍历字符串数组,对每个字符串进行排序,将得到的结果放入 map 中对应的位置。最后将 map 中的所有 value 值取出构造成一个 list 对象返回。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { public List<List<String>> groupAnagrams(String[] strs) { Map<String, List<String>> map = new HashMap<>(); for (int i = 0; i < strs.length; i++) { char[] chars = strs[i].toCharArray(); Arrays.sort(chars); String newStr = String.valueOf(chars); if (map.containsKey(newStr)) { List<String> anagrams = map.get(newStr); anagrams.add(strs[i]); } else { List<String> anagrams = new LinkedList<>(); anagrams.add(strs[i]); map.put(newStr, anagrams); } } return new LinkedList<>(map.values()) ; } }
|