题目:
分析:利用排序和哈希表,对字符串数组中的每一个数组进行排序。这样的话,乱序字符串排序之后有相同的字符顺序,用哈希表存储排序后的字符串为key,源字符串为value,因为一个字符串可能有多个乱序字符串,所以定义一个arraylist来存储这些乱序字符串。最后遍历keyset,输出value——ArrayList数组容量大于等于2的value值。
package String; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; //给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。 //如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。 public class anagrams { /** * @param strs: A list of strings * @return: A list of strings */ public List<String> anagrams(String[] strs) { // write your code here List<String> result=new ArrayList<>(); if(strs.length<=1 || strs==null) return result; HashMap<String,ArrayList<String>> hashMap=new HashMap<>(); for(int i=0;i<strs.length;i++){ char[] chars=strs[i].toCharArray(); Arrays.sort(chars); String s=String.valueOf(chars); if(!hashMap.containsKey(s)){ ArrayList<String> list=new ArrayList<>(); hashMap.put(s,list); } hashMap.get(s).add(strs[i]); } for(String s:hashMap.keySet()){ if(hashMap.get(s).size()>=2){ for(String ss:hashMap.get(s)) result.add(ss); } } return result; } }