LeetCode-438-找到字符串中所有字母异位词

思路
使用滑动窗口来解决,用哈希表定义两个容器,一个是目标容器,一个是窗口容器,然后通过滑动窗口来找出符合要求的索引
代码
class Solution {
public List<Integer> findAnagrams(String s, String p) {
Map<Character,Integer> need=new HashMap<>();//目标容器
Map<Character,Integer> win=new HashMap<>();//窗口容器
//初始化目标容器
for(int i=0;i<p.length();i++){
char tmp=p.charAt(i);
need.put(tmp,need.getOrDefault(tmp,0)+1);
}
int left=0,right=0;
int cnt=0;
List<Integer> res=new ArrayList<>();
while(right<s.length()){
char r=s.charAt(right);
right++;//扩大
if(need.containsKey(r)){
win.put(r,win.getOrDefault(r,0)+1);
if(win.get(r).equals(need.get(r))) cnt++;
}
while(cnt==need.size()){
if(right - left == p.length()){
res.add(left);
}
char l = s.charAt(left);
left++;//缩小
// 判断和缩小滑窗边界
if(need.containsKey(l)){
if(need.get(l).equals(win.get(l))) cnt--;
win.put(l,win.get(l)-1);
}
}
}
return res;
}
}
该博客介绍了如何利用滑动窗口和哈希表来解决LeetCode上的第438题,即在给定字符串中查找所有字母异位词。博主分享了具体的思路,包括使用两个哈希表分别作为目标容器和窗口容器,并通过滑动窗口来匹配和更新容器,最终找到所有符合条件的字母异位词的起始索引。
988

被折叠的 条评论
为什么被折叠?



