leetcode 49.字母异位词分组
题干
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i]
仅包含小写字母
解题
思路:利用哈希表键值对,键取每个字符串的tochararray方法后再sort排序,值取与键对应的字符串数组,最后返回一个字符串数组列表,用哈希表的values初始化。
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
//样例strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
//输出[["bat"],["nat","tan"],["ate","eat","tea"]]
//定义一个哈希表,要实现子键值对是"ant",["nat","tan"]这种形式
HashMap<String, List<String>> tempmap = new HashMap<String, List<String>>();
for(String str:strs){
//遍历字符串数组
char[] array=str.toCharArray();
Arrays.sort(array);
String key=new String(array);
//至此"eat"转成"aet"
List<String>list= tempmap.getOrDefault(key,new ArrayList<>());
//list获取到tempmap中键为"aet"的值,返回一个列表[]
list.add(str);
/*put会覆盖,比如说原来哈希表里是key:"aet",values:["eat"],put进去"aet",["eat","ate"],就变成key:"aet",values:["eat","ate"]*/
tempmap.put(key,list);
}
return new ArrayList<List<String>>(tempmap.values());
}
}
标签:ate,aet,49,strs,异位,eat,key,tan,leetcode
From: https://www.cnblogs.com/vastjoy/p/18365955