438. 找到字符串中所有字母异位词(滑动窗口)
思路
题目要求我们找到异位词,一样开始分析题目,什么是异位词,怎么判段异位词,这是我们解题的开口,不理解这个就做不了,异位词特点,包含的字符相同,只是存在位置不同,
知道特点利用特点判断是不是异位词,那我们只需要记录p字符串所有的字符,然后在s字符串里面找长度相同,包含字符个数一样的字串就行了,所以我们需要利用滑动窗口,来固定窗口大小,然后右移动。
代码
class Solution {
public:vector<int> findAnagrams(string s, string p) {int n=p.size();int m=s.size();
//记录字串大小vector<int> pcount(26);vector<int> scount(26);//存储s字符串的字串,用来判断是不是异位词
//记录p的字符个数,后面来判断是不是异位词vector<int> reslut;
//结果数组for(int i=0;i<n;i++){pcount[p[i]-'a']++;}
//记录p字符int left=0;//滑动窗口左指针//right位右指针for(int right=0;right<m;right++){scount[s[right]-'a']++;//窗口大小合适了if(right-left+1==n){//判断if(scount==pcount) reslut.emplace_back(left);//左指针右移动,保持窗口大小,移除窗口的字符需要删掉scount[s[left]-'a']--;left++;}}return reslut;}
};