leetcode 49 字母异位词分组

周日了,想到时光的流逝,明天就是周一,焦虑万分。
好久没有刷题,发现一些细节都忘了,比如 char[] 转 string,我直接搞了个 .toString(),结果给我返回了一串not expected。map都忘记是put还是add了,最后的结果 map.values()想直接强转 list返回。(((φ(◎ロ◎;)φ)))
题目


题目

思路
这就相当于把string分组嘛,相同的组的string的字符一样。自然而然想到了map。那么key呢,把所有的字符串都归一化成一种样式,比如从小到大排序,或者从大到小排序,只要大家都遵守一样的规则就欧克了。
答案

class Solution {
    public List> groupAnagrams(String[] strs) {
        Map> result = new HashMap<>();
        for(String str : strs) {
            String key = sortStr(str);
            if(result.containsKey(key)) {
                result.get(key).add(str);
            }else {
                List value = new ArrayList<>();
                value.add(str);
                result.put(key, value);
            }
        }
        List> res = new ArrayList<>();
        res.addAll(result.values());
        return res;
    }

    private String sortStr(String str) {
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        return String.valueOf(chars);
    }
}

那么来发散一下
1 char[] .toString 到底返回了什么
重载object的toStirng方法,返回类型@hash值

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

类可以重写该函数,输出自己想要的结果。

2 如何转成String
(1)强转,(String),强转用instanceof做类型检查,来判断是否可以转换。否则类型不匹配,抛出CalssCastException异常。
(2).toString()
object不能为null,否则会抛出NullPointerException异常。
(3)String.valueOf()
挺好的,但是如果object为null,会返回字符串"null"
(4)Arrays.toString(char[] a),返回的是 用逗号分隔,包围[]的字符串。
(5)new String(char[] a)也可

你可能感兴趣的:(leetcode 49 字母异位词分组)