[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;
    }
}

 

posted @ 2015-07-12 13:59  ~每天进步一点点~  阅读(160)  评论(0编辑  收藏  举报