题解 | #字母异位词分组#

字母异位词分组

https://www.nowcoder.com/practice/68bda87f91664623a4213abb00e41a5a

import java.util.*;

/**
 * NC294 字母异位词分组
 * @author d3y1
 */
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param strs string字符串一维数组
     * @return string字符串二维数组
     */
    public String[][] groupAnagrams (String[] strs) {
        // return solution1(strs);
        return solution2(strs);
    }

    /**
     * 排序+哈希
     * @param strs
     * @return
     */
    private String[][] solution1(String[] strs){
        HashMap<String, ArrayList<String>> map = new HashMap<>();

        String key;
        char[] chars;
        ArrayList<String> list;
        for(String str: strs){
            chars = str.toCharArray();
            Arrays.sort(chars);
            key = String.valueOf(chars);
            if(map.containsKey(key)){
                list = map.get(key);
            }else{
                list = new ArrayList<>();
            }
            list.add(str);
            map.put(key, list);
        }

        String[][] result = new String[map.size()][];
        int i = 0;
        for(String keyWord: map.keySet()){
            list = map.get(keyWord);
            result[i] = new String[list.size()];
            for(int j=0; j<list.size(); j++){
                result[i][j] = list.get(j);
            }
            i++;
        }

        return result;
    }

    /**
     * 排序+哈希: 简化
     * @param strs
     * @return
     */
    private String[][] solution2(String[] strs){
        HashMap<String, ArrayList<String>> map = new HashMap<>();

        String key;
        char[] chars;
        ArrayList<String> list;
        for(String str: strs){
            chars = str.toCharArray();
            Arrays.sort(chars);
            key = String.valueOf(chars);
            if(map.containsKey(key)){
                list = map.get(key);
            }else{
                list = new ArrayList<>();
            }
            list.add(str);
            map.put(key, list);
        }

        String[][] result = new String[map.size()][];
        int i = 0;
        for(String keyWord: map.keySet()){
            list = map.get(keyWord);
            result[i] = new String[list.size()];
            list.toArray(result[i]);
            i++;
        }

        return result;
    }
}

全部评论

相关推荐

04-01 12:25
中南大学 Java
枯基Evan_:腾讯一面写过11次的题目没写出来
点赞 评论 收藏
分享
努力的小明a:项目看着很眼熟,施磊老师吧,我也学的这个😋我当时是把rpc框架做成了一个分布式网盘,这是一个项目,然后muduo库做成集群即时通讯,又用QT做了个交互的客户端,这样又一个项目,然后一个轻量redis,一个CAD,总共四个项目,投了三个月就今天2月份一个小厂Qt offer,然后后面想开了,Qt啥的都能干,这个月get了个北京大厂的offer,做java后端,人生就是这么魔幻,现在就在去北京入职的路上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务