字母异位词分组
1、题目:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
2、解题思路:
2.1理解题目要求
- 字母异位词:由相同的字母以不同的顺序构成的词
- 找到字母异位词,将其组合在一起,返回结果列表
2.2找到字母异位词
-
我们发现字母异位词只要经过排序将会变成一样的词,举例:
//"eat", "tea", "ate"经过排序都会变成"aet" -
将排序后的词当做哈希表中的key值,对应的字母异位词当value值
-
那我们就直接将相同的key值所对应的value值归为一类,就完成了分类
2.3整体思路架构
- 判断字符串是否为空
- 创建哈希表
<String,List> - 遍历字符串数组(遍历异位词)
- 将遍历到的字符串转化为字符数组(将遍历到的异位词转化为字符数组,方便对字母排序)
- 对转化后的字符数组进行排序(相同的异位词排序后变成一样的了)
- 将排序好的字符数组作为哈希表的key值
- 判断哈希表中是否有相同的key值,有就将该异位词放到key值对应的value中,没有就创建新的键值对
- 最后返回哈希表中的value值
3、代码实现
public List<List<String>> groupAnagrams(String[] strs) {
//判断是否为空字符串数组
if(strs == null || strs.length == 0){
return new ArrayList();
}
//1.创建一个哈希表
Map<String,List> map = new HashMap<String, List>();
for (String s: strs) {
//将字符串转化为字符数组
char[] chars = s.toCharArray();
//对字符数组按照字母顺序排序
Arrays.sort(chars);
//将排序后的字符串作为哈希表中的key值
String key = String.valueOf(chars);
//2.判读哈希表中是否有该key值
if (!map.containsKey(key)){
//若不存在,则为新的异位词语,在map中创建新的键值对
map.put(key,new ArrayList());
}
//3.将该字符串放在对应key的list中