49. Group Anagrams

来源:互联网 发布:魅族手机移动数据开关 编辑:程序博客网 时间:2024/05/22 12:36
题目:

Given an array of strings, group anagrams together.

For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
Return:

[  ["ate", "eat","tea"],  ["nat","tan"],  ["bat"]]
class Solution {    public List<List<String>> groupAnagrams(String[] strs) {        /*        解题思路:将字符串排序,然后将排序后的字符作为hashmap的键,没有排序的字符串作为值,                 如果发现键相同,则取出值,并加新的串拼接起来即可                 最后遍历map,把字符串取出,再把字符串变成字符数组即可,                 注意字符串为空的情况        */        List<List<String>> result=new ArrayList<List<String>>();        if(strs.length==0){            return result;        }              HashMap<String,String> map=new HashMap<String,String>();        for(int i=0;i<strs.length;i++){               String temp=getSum(strs[i]);                if(map.containsKey(temp)){                  String stemp=map.get(temp);                  stemp=stemp+"!"+strs[i];                  map.put(temp,stemp);               }else{                 map.put(temp,strs[i]);               }                   }//for        Set<String> set=map.keySet();for (String string : set) {String s=map.get(string);String[] sets=s.split("!");            List<String> array=new ArrayList<String>();            //字符串为空的时候,!比空字符串数组的个数多1            if(sets.length==0){                for(int i=0;i<=s.length();i++){                    array.add("");                }            }else{               for(int i=0;i<sets.length;i++){                array.add(sets[i]);   }             }result.add(array);}        return result;            }    //将字符变成字符数组,并且求和    public static String getSum(String str){        char[] ch=str.toCharArray();        Arrays.sort(ch);        String result="";        for(int i=0;i<ch.length;i++){            result+=ch[i];        }        return result;    }}