[抄题]:
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(参数)把数据转成字符串,只要字母数组的顺序一样 值就一样,所以要排序
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
- 没法一次处理所有字符串,就一次只处理一个
//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给出的题目变变变]:
[代码风格] :
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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()); } }