字母异位词分组题解Java

Posted vibe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字母异位词分组题解Java相关的知识,希望对你有一定的参考价值。

 

其实所谓异位就是指包含的字母是一样的只是位置不同。所以只要把其排序,若是字母异位词应当相等。

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        String[] tmp = new String[strs.length];
        int index = 0;
        for(String e : strs){
            char[] a = e.toCharArray();
            Arrays.sort(a);
            tmp[index++] = String.valueOf(a);
        }
        List<List<String>> ans = new LinkedList<>();
        boolean[] vis = new boolean[strs.length];
        for(int i = 0 ;i<tmp.length-1;i++){
            List<String> t = new LinkedList<>();
            if(!vis[i]){
                t.add(strs[i]);
            }else{
                continue;
            }   
            for(int j = i+1;j<tmp.length;j++){
                if(tmp[i].equals(tmp[j])){
                    t.add(strs[j]);
                    vis[j] = true;
                }
            }
            ans.add(t);
        }
    if(!vis[strs.length-1]){
        List<String> t = new LinkedList<>();
        t.add(strs[strs.length-1]);
        ans.add(t);
    }
    return ans;
    }
}

这样子效率是非常慢的用了两层循环。

我们可以换种想法用HashMap。创建映射Key 为排好序的字符串 (Map为一种映射关系 有Key 和value 即值值键对 一个Key 对应一个value Key 不可重复)

 

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        
        List<List<String>> res = new ArrayList<>();
        
        // 记录 (排序后的字符串,list编号)
        Map<String, Integer> map = new HashMap<>();
        int t = 0;  对应Map长度
        for (String str : strs) {       
            String s = sort(str);   
            Integer index = map.get(s);
            if (index == null) {  //如果不存在对应的Key则新建并加入
                List<String> list = new ArrayList<>();
                list.add(str);
                res.add(list);
                map.put(s,t++ );
            } else {若存在则对应的列表加入
                res.get(index).add(str);
            }
        }
        
        return res;
    }
    
    public String sort(String s) {
        char[] c = s.toCharArray();
        Arrays.sort(c);
        return new String(c);
    }
}

 

以上是关于字母异位词分组题解Java的主要内容,如果未能解决你的问题,请参考以下文章

49.字母异位词分组

java刷题--49字母异位词分组

力扣刷题:字母异位词分组(java实现)

Java 求解有效的字母异位词

leetcode49字母异位词分组

49. 字母异位词分组