zoukankan      html  css  js  c++  java
  • 字母异位词分组题解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);
        }
    }
  • 相关阅读:
    TCP和UDP的区别
    项目--华为商城---登录页面(一)
    Servlet(一)—— 文件上传(表单文件上传)
    LeetCode(一) —— 存在重复
    电脑右击不能创建txt文件
    边工作边刷题:70天一遍leetcode: day 92-2
    自底向上集成 Bottom-Up
    分层集成(线性关系) Layers
    基干集成(内核耦合度高) Backbone
    三明治集成(分而治之策略) 又分为传统型和改进型 Sandwich
  • 原文地址:https://www.cnblogs.com/vibe/p/12247285.html
Copyright © 2011-2022 走看看