[leedcode 49] Anagrams
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
public class Solution { public List<String> anagrams(String[] strs) { //Anagram(回文构词法)是指打乱字母顺序从而得到新的单词,比如 "dormitory" 打乱字母顺 //序会变成 "dirty room" , "tea" 会变成"eat"。 //回文构词法有一个特点:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序。 //因此,将几个单词按照字母顺序排序后,若它们相等,则它们属于同一组 anagrams 。 //解题思路:本文借用HashMap<String,Integer>数据结构,key保存的是排完序的字符串,value代表该字符串的索引值。 //遍历一个字符串,排序后,如果该字符串已经存在,则保存结果,注意为了防止重复添加,当添加第二个时,需要将value置-1 //一遍出现大于2个字符串时,不会重复。 //注意ArraySort(char[]),参数必须是char[],注释部分不能少 List<String> res=new ArrayList<String>(); HashMap<String ,Integer> map=new HashMap<String,Integer>(); for(int i=0;i<strs.length;i++){ char[] tmp=strs[i].toCharArray(); Arrays.sort(tmp);//不能少,不能写成Arrays.sort(tmp.toCharArray()) String temp=new String(tmp);//不能少,输入“”时 if(map.containsKey(temp)){ res.add(strs[i]); if(map.get(temp)!=-1){ res.add(strs[map.get(temp)]); map.put(temp,-1); } }else{ map.put(temp,i); } } return res; } }