int n =strs.length; int[][] count = new int[n][26]; for(int i=0;i<n;i++){ String temp = strs[i]; char[] c = temp.toCharArray(); for(int j=0;j<c.length;j++){ count[i][c[j]-'a']++; } }
之后只要比较这个数组的哪些行相等即可了。只要有行相等就插入给最后的链表,
boolean[] id = new boolean[n]; ArrayList<String> s = new ArrayList<String>(); for(int i=0;i<n;i++){ //只要出现过重复的就不看了 if(id[i]==true){ continue; } int j; int sign =1; s.add(strs[i]); //查看之后的是否和目前这个相同 for(j=i+1;j<n;j++){ boolean identical = true; for(int k=0;k<25;k++){ if(count[i][k]!=count[j][k]){ identical=false; break; } } //如果出现的字符都相同,就加入答案 if(identical == true){ s.add(strs[j]); id[j]=true; sign=0; continue; } } //如果没出现过,删除事先加入进去的这个 if(sign==1){ s.remove(0); } }
public class Solution { public ArrayList<String> anagrams(String[] strs) { // Start typing your Java solution below // DO NOT write main() function ArrayList<String> anagram = new ArrayList<String>(); HashMap<String,ArrayList<String>> list = new HashMap<String,ArrayList<String>>(); for (String str: strs) { char[] chars = str.toCharArray(); Arrays.sort(chars); String key = new String(chars); if (list.containsKey(key)) { list.get(key).add(str); } else { list.put(key,new ArrayList<String> (Arrays.asList(str))); } } for (ArrayList<String> test:list.values()) { if (test.size()>1) { anagram.addAll(test); } } return anagram; } }