Given an array of strings, return all groups of strings that are anagrams.數據結構
Note: All inputs will be in lower-case.spa
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; } }