Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:
[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]
Note: All inputs will be in lower-case.
解题思路:
这道题让我们群组给定字符串集中所有的错位词,所谓的错位词就是两个字符串中字母出现的次数都一样,只是位置不同,比如abc,bac, cba等它们就互为错位词,那么我们如何判断两者是否是错位词呢,我们发现如果把错位词的字符顺序重新排列,那么会得到相同的结果,所以重新排序是判断是否互为错位词的方法,由于错位词重新排序后都会得到相同的字符串,我们用排序后的字符串作为key,这个字符串对应的错位词的集合作为value。
class Solution { public List<List<String>> groupAnagrams(String[] strs) { /* 如果把错位词的字符顺序重新排列,那么会得到相同的结果.我们用排序后的字符串作为key,这个字符串对应的错位词的集合作为value。 */ Map<String,List<String>> map=new HashMap<String,List<String>>(); if(strs==null||strs.length==0) return new ArrayList<List<String>>(); for(String s:strs){ char[] c=s.toCharArray(); Arrays.sort(c); String str=String.valueOf(c); if(!map.containsKey(str)){ List<String> li=new ArrayList<>(); li.add(s); map.put(str,li); }else{ map.get(str).add(s); } } return new ArrayList<List<String>>(map.values()); } }