题目:
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"]
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
题目分析:
本题的要求是将各组字符按照字母构成相同与否进行分组,不同字母组合分为一组,然后按照字典顺序排序。
将字符串排序,然后将排序后的字符作为hashmap的键,没有排序的字符串作为值,
如果发现键相同,则取出值,并加新的串拼接起来即可
最后遍历map,把字符串取出,再把字符串变成字符数组即可,
注意字符串为空的情况
代码如下:
package LeetCode_HashTable; import java.util.*; public class GroupAnagrams_49_1023 { public List<List<String>> GroupAnagrams(String[] strs){ if (strs == null || strs.length == 0) { return new ArrayList<List<String>>(); //判断是否合法输入 } Map<String, List<String>> map = new HashMap<>(); for (String s : strs) { char[] array = s.toCharArray(); //把字符串转换成字符数组 Arrays.sort(array); //将字符数组进行升序排序 String temp1 = String.valueOf(array); //将排序后的字符数组转换成字符串 if (!map.containsKey(temp1)) { map.put(temp1, new ArrayList<String>()); //如果map里面不包含temp1键,则将其添加到map中,并将其键值设置为空 } map.get(temp1).add(s); //找到在map中键temp1的键值,并将s添加到键值里面 } return new ArrayList<List<String>>(map.values()); } }