题解 | #牛棚品种分类#
牛棚品种分类
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();
    }
}
 投递大连飞创信息技术有限公司等公司10个岗位
投递大连飞创信息技术有限公司等公司10个岗位
