题解 | #牛棚品种分类#
牛棚品种分类
https://www.nowcoder.com/practice/0b6068f804b9426aa737ea8606e8d5c3
知识点:哈希表
思路:
- 创建一个
Map
对象mp
用于存储分组的结果,其中键为长度为 26 的整型数组int[]
,值为字符串列表List<String>
。 - 遍历字符串列表
strs
,对于每个字符串s
,通过调用get(s)
方法获取其对应的长度为 26 的整型数组作为键,并将该字符串加入到相应的值列表中。 - 创建一个列表
keys
,用于存储mp
中的键。 - 对
keys
进行排序,排序规则是按照每个键对应的值列表中的第一个字符串进行比较。 - 创建一个新的
Map
对象res
用于存储最终的分组结果。 - 遍历排序后的
keys
,将每个键对应的值列表加入到res
中。 - 返回
res
,即为分组后的结果。
编程语言:java
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param strs string字符串一维数组 * @return string字符串一维数组 */ public static String[] groupAnagrams(String[] strs) { Map<String, List<String>> mp = new HashMap<>(); for (String s : strs) { String key = getKey(s); List<String> group = mp.getOrDefault(key, new ArrayList<>()); group.add(s); mp.put(key, group); } List<String> result = new ArrayList<>(); for (List<String> group : mp.values()) { group.sort(String::compareTo); // 对每个分组进行升序排序 result.add(join(group)); } result.sort(String::compareTo); // 对整个结果进行升序排序 return result.toArray(new String[0]); } public static String getKey(String s) { char[] arr = s.toCharArray(); Arrays.sort(arr); return new String(arr); } public static String join(List<String> group) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < group.size(); i++) { sb.append(group.get(i)); if (i < group.size() - 1) { sb.append(","); } } return sb.toString(); } }