【hashmap】【将排序之后的字符串作为哈希表的键】【获取 HashMap 中所有值的集合】Leetcode 49 字母异位词分组
- 解法1 将排序之后的字符串作为哈希表的键
- 解法2 在解法一的基础上加入了getOrDefault
---------------🎈🎈题目链接🎈🎈-------------------
在Java中,数组是不可用作HashMap的键的,因为数组的hashCode()方法不会返回数组元素的内容的哈希码。所以应该使用字符串作为键。
解法1 将排序之后的字符串作为哈希表的键
⭐️由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。
字符串转化为字符数组:char[ ] mychar = str.toCharArray()
字符数组转化为字符串:String mystring = new String(mychar)
字符串排序:Arrays.sort( )
获取 HashMap 中所有值的集合 :myhashmap.values()
直接返回 return new ArrayList<>(myhashmap.values())
class Solution {public List<List<String>> groupAnagrams(String[] strs) {HashMap<String, List<String>> myhashmap = new HashMap<>();for(String str:strs){char[] chararry = str.toCharArray();Arrays.sort(chararry); // 排序String strtemp = new String(chararry); // 字符数组再次转化为字符串// key是排序后的strtemp value就是最后要返回的列表if(myhashmap.containsKey(strtemp)){ // 如果包含 value就在已有列表基础上添加当前的strList<String> temp = myhashmap.get(strtemp);temp.add(str);myhashmap.put(strtemp,temp);} else{ // 如果不包含,那就向hashmap中添加key valueList<String> temp = new ArrayList<>();temp.add(str);myhashmap.put(strtemp, temp);}}return new ArrayList<>(myhashmap.values());}
}
解法2 在解法一的基础上加入了getOrDefault
class Solution {public List<List<String>> groupAnagrams(String[] strs) {// 在Java中,数组是不可用作HashMap的键的,因为数组的hashCode()方法不会返回数组元素的内容的哈希码。所以应该使用字符串作为键。HashMap<String, List<String>> myhashmap = new HashMap<>();for(String str:strs){char[] chararry = str.toCharArray();Arrays.sort(chararry); // 排序String strtemp = new String(chararry); // 字符数组再次转化为字符串// key是排序后的strtemp value就是最后要返回的列表List<String> list = myhashmap.getOrDefault(strtemp, new ArrayList<String>()); // 取出结果的列表list.add(str); // 添加str到列表中myhashmap.put(strtemp,list);}return new ArrayList<>(myhashmap.values());}
}