leetcode Group Anagrams题解

题目描述:

Given an array of strings, group anagrams together.

Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

中文理解:

给定一个字符串数组,将字符串数组中字符组成相同的字符串聚在一起。

解题思路:

首先开辟一个和原始数组同样的大小的字符穿数组,然后将每个元素排序后放入新的数组中,然后使用hashmap将相同的字符串的下标放入key中,然后遍历hashmap,将字符串下标到原始数组中替换成字符串放入最终的结果中。

代码(java):

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> list=new ArrayList();
        if(strs.length==0)return list;
        HashMap<String,ArrayList<Integer>> map=new HashMap();
        String[] strsCopy=new String[strs.length];
        int i=0;
        for(String str:strs){
            char []strC=str.toCharArray();
            Arrays.sort(strC);
            str=new String(strC);
            strsCopy[i++]=str;
        }
        i=0;
        ArrayList<Integer> temp=new ArrayList();
        for(String str:strsCopy){
            if(map.containsKey(str)){
                temp=map.get(str);
                temp.add(i);
                map.put(str,temp);
            }
            else{
                temp=new ArrayList();
                temp.add(i);
                map.put(str,temp);
            }
            i++;
        }
        ArrayList<String> stemp=new ArrayList();
        for(String str:map.keySet()){
            stemp=new ArrayList();
            for(int val:map.get(str)){
                stemp.add(strs[val]);
            }
            list.add(stemp);
        }
        return list;
    }
}

猜你喜欢

转载自blog.csdn.net/leo_weile/article/details/90116440