【hashmap】【将排序之后的字符串作为哈希表的键】【获取 HashMap 中所有值的集合】Leetcode 49 字母异位词分组
---------------🎈🎈题目链接🎈🎈-------------------
在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就在已有列表基础上添加当前的str
List<String> temp = myhashmap.get(strtemp);
temp.add(str);
myhashmap.put(strtemp,temp);
} else{ // 如果不包含,那就向hashmap中添加key value
List<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());
}
}