1. 字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]
说明:
- 所有输入均为 小写字母 。
- 不考虑答案输出的顺序。
(1)Map
1.创建一个hashmap,该map用于存储:key:排序后值 value排序前原值
2.遍历取出每个单词,并进行排序,字母异位词排序后相同
3.判断该排序后词是否已经添加进map,未添加则存入排序后值,并新创建一数组
4.按照<排序后值,排序前原值数组>依次存入每个词
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, ArrayList<String>> map = new HashMap<>(); //该map用于存储:key:排序后值 value排序前原值
for (int i = 0; i < strs.length ; i++) {
//遍历取出每个值
char[] chars = strs[i].toCharArray();
Arrays.sort(chars); //排序
String key = String.valueOf(chars);
if (!map.containsKey(key)) {
//判断该词是否已经添加进map,未添加则存入排序后值,新创建一数组
map.put(key, new ArrayList<>());
}
map.get(key).add(strs[i]);
}
return new ArrayList<>(map.values());
}
}
2. 找到字符串中所有字母异位词
注意:所有输入均为 小写字母
子串问题都考虑滑动窗口
(1)滑动窗口 + hashMap
class Solution {
public List<Integer> findAnagrams(String s, String p) {
// 两个哈希表,记录窗口中的字符和需要凑齐的字符
Map<Character, Integer