字谜分组

2018-09-22  本文已影响0人  小白学编程

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:

所有输入均为小写字母。
不考虑答案输出的顺序。

思路

判断字符串是否相等,可以进行排序,再做判断
用hashmap来存储数据,键为该字符串经过排序的结果,值为list添加了该字符串的原值

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        
        if(strs==null || strs.length == 0){
            return new ArrayList<List<String>>();
        }
        Map<String,List<String>> map=new HashMap<String,List<String>>();
        
        for(int i=0;i<strs.length;++i){
            
            char[] s=strs[i].toCharArray();
            Arrays.sort(s);
            String st=new String(s);
            List<String> list=new ArrayList<String>();
            
            if(map.containsKey(st)){
                list=map.get(st);
            }
            list.add(strs[i]);
            map.put(st,list);
        }
        return new ArrayList<List<String>>(map.values());
    }
}
上一篇 下一篇

猜你喜欢

热点阅读