1.题目
已知一组字符串,将所有anagram(由颠倒字母顺序而构成的字)放到一起输出。
例如:["eat", "tea", "tan", "ate", "nat", "bat"]
返回:[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]
2.实现思路
定义一个映射关系,哈 希 表 以 内 部 进 行 排 序 的 各 个 单 词 为 key , 以 字 符 串 向 量 (List<string>)为value,存储各个字符数量相同的字符串(anagram)。
step1:遍历每一个字符串,判断排序后的结果
- 已经存在在hash表中,就将这个字符串作为value放入hash表
- 不存在,则将当前结果作为key,new ArrayList() 作为value 放入hash表
3.代码实现
public class GroupAnagrams {
public static List< List<String> > groupAnagrams(String[] strs){
if(strs==null||strs.length==0){
return null;
}
HashMap<String,List<String>> map=new HashMap<String,List<String>>();
for (String str:strs) {
char[] item=str.toCharArray();
Arrays.sort(item);
String key=String.valueOf(item);
if(!map.containsKey(key)){
map.put(key,new ArrayList<String>());
}
map.get(key).add(str);
}
return new ArrayList<>(map.values());
}
public static void main(String[] args) {
String[] strs={"eat", "tea", "tan", "ate", "nat", "bat"};
List list=groupAnagrams(strs);
System.out.println(list.toString());
}
}