LeetCode 49. 字母异位词分组
题目描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
思路
思路:甜姐爆强解题思路,Java API玩的66的:比如将 [b,a,a,a,b,c] 编码成 a3b2c1,使用编码后的字符串作为 HashMap 的 Key 进行聚合。
思路就是利用Java的Arrays
工具类,将strs
转换为流形式,并在collect
方法中使用Collectors.groupingBy()
,根据我们制定的规则进行分组,最后返回values。
代码
class Solution {public List<List<String>> groupAnagrams(String[] strs) {// https://zhuanlan.zhihu.com/p/656502312 -> 一文掌握Java8 Stream 中 Collectors 的24个操作// https://blog.csdn.net/veezean/article/details/125720283 -> 全面吃透JAVA Stream流操作,让代码更加的优雅return new ArrayList<>(Arrays.stream(strs).collect(Collectors.groupingBy(str -> {int[] counter = new int[26];for (int i = 0; i < str.length(); i++) {counter[str.charAt(i) - 'a']++;}StringBuilder sb = new StringBuilder();for (int i = 0; i < counter.length; i++) {if (counter[i] != 0) {sb.append((char) ('a' + i));sb.append(counter[i]);}}return sb.toString();})).values());}
}