zoukankan      html  css  js  c++  java
  • 49. 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"]
    ]

     [暴力解法]:

    时间分析:

    空间分析:

     [优化后]:

    时间分析:

    空间分析:

    [奇葩输出条件]:

    [奇葩corner case]:

    [思维问题]:

    不知道k-v怎么存,看来还是用得不熟练

    [一句话思路]:

    anagram用String.valueOf(参数)把数据转成字符串,只要字母数组的顺序一样 就一样,所以要排序

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. 没法一次处理所有字符串,就一次只处理一个
    //for loop: add to char, to map
            for (String str : strs) {
                char[] chars = str.toCharArray();
                Arrays.sort(chars);
                String anagram = String.valueOf(chars);
                if (!map.containsKey(anagram)) map.put(anagram, new ArrayList<String>());
                map.get(anagram).add(str);
            }

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    String.valueOf(chars) 不但要求字符数组一样,也要求里面元素的顺序一样

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    [关键模板化代码]:

    不排序的后果:

    [["tan"],["nat"],["tea"],["ate"],["bat"],["eat"]]

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

     [代码风格] :

    class Solution {
        public List<List<String>> groupAnagrams(String[] strs) {
            //cc
            if (strs == null || strs.length == 0) return new ArrayList<List<String>>();
            
            //ini: map, char[]
            Map<String, List<String>> map = new HashMap<>();
            
            //for loop: add to char, to map
            for (String str : strs) {
                char[] chars = str.toCharArray();
                Arrays.sort(chars);
                String anagram = String.valueOf(chars);
                if (!map.containsKey(anagram)) map.put(anagram, new ArrayList<String>());
                map.get(anagram).add(str);
            }
            
            //return (map)
            return new ArrayList<List<String>>(map.values());
        }
    }
    View Code
  • 相关阅读:
    js获取url参数
    Ueditor百度编辑器中的 setContent()方法的使用
    js防止sql注入的参数过滤
    父级元素点击,遮盖了子元素的点击
    input onchange事件
    jq选择子元素
    nodejs mysql 执行多条sql语句
    java.util.ConcurrentModificationException
    Group by与having理解
    ibatis配置xml文件中CDATA的用法
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8996805.html
Copyright © 2011-2022 走看看