题目描述
题目链接:https://leetcode-cn.com/problems/group-anagrams/
Given an array of strings, group anagrams together.
For example, given: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
Return:
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
解题思路
该题目要求是将给定的一组字符串数组,按照同构词(相同字母组成的单词)分类,每组单词按照字典排序。
还是利用hash表。同构词在排序过后,内容一致。遍历String数组,先对字符串进行排序,将排序后的同构词作为key,同构词的列表作为value,遍历过程中不断将字符串添加到对应的key的列表中,最终返回结果。
程序实现
public class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> result=new ArrayList<List<String>>();
if(strs==null||strs.length==0)
return result;
Map<String,List<String>> map=new HashMap<String,List<String>>();
for(String s:strs){
char[] ca=s.toCharArray();
Arrays.sort(ca);
String keyStr=String.valueOf(ca);
if(!map.containsKey(keyStr))
map.put(keyStr,new ArrayList<String>());
map.get(keyStr).add(s);
}
return new ArrayList<List<String>>(map.values());
}
}