[leedcode 49] Anagrams

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;
    }
}
相關文章
相關標籤/搜索