题解 | #牛棚品种分类#
牛棚品种分类
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();
}
}
顺丰集团工作强度 378人发布