滑动窗口(定长与不定长)
例一:找到字符串中的所有字母异位词(力扣438)
找到字符串中的所有字母异位词
题目描述:
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
题目分析:异位词指 相同字母重排,即在一个字符串里面只要各个字母出现的次数相同即可,与出现顺序无关。所有我们只需要判断s中和p长度相同的一段子串里面各个字母出现的次数和p中是否相同即可。这里就会用到一个定长滑动窗口的思想。在s中从开头有一个长度和p一样的窗口,不断向后滑动进行判断,直到到达s的末尾。
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
int m=s.size();
int n=p.size();
if(m<n)return {};
vector<int>window(26,0);
vector<int>pt(26,0);
for(int i=0;i<n;i