[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;
    }
}
相关文章
相关标签/搜索