字符数组转字符串

项目场景:

49. 字母异位词分组


问题描述

结果总是不对。代码总共两块逻辑,编码和存储到res。

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> res=new LinkedList<>();
        HashMap<String, LinkedList<String>> map=new HashMap<>();
        for(String str: strs){
            String code=encode(str);
            map.putIfAbsent(code, new LinkedList<>());
            map.get(code).add(str);
        }
        for(Map.Entry<String, LinkedList<String>> entry: map.entrySet()){
            res.add(entry.getValue());
        }
        return res;
    }

    public String encode(String str){
        char[] count=new char[26];
        for(char c: str.toCharArray()){
            count[c-'a']++;
        }
        return count.toString();
    }
}

原因分析:

根据结果发现,存储没有问题,只可能是编码错误导致每个map的key不同,从而没有将异位词放在一起。肉眼看编码位置没有问题。debug发现返回结果是count.toString().
字符数组转字符串_第1张图片
在Java中,如果没有重写toStrign()方法,那么返回结果就是
getClass().getName() + ‘@’ + Integer.toHexString(hashCode()).
显而易见,map比较的是地址而非值。

解决方案:

两种方式,
return count.toString();
改为
return new String(count);

return String.valueOf(count);其实底层还是new String(count)
字符数组转字符串_第2张图片
PS:Java中只有String、Date、File、包装类等重写了Object类中的toString()方法。

你可能感兴趣的:(java,leetcode,开发语言)