给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。
换句话说,s1 的排列之一是 s2 的 子串 。
s1 和 s2 仅包含小写字母
思路
滑动窗口 双指针
bool checkInclusion(char * s1, char * s2){
int len1=strlen(s1);
int len2=strlen(s2);
int cnt[26]={};//创建26个字母数组,记录出现个数
int i=0;
for(i=0;i<len1;i++){//对s1的字母进行记录次数
cnt[s1[i]-'a']++;
}
int left=0,right=0;
for(right=0;right<len2;right++){
cnt[s2[right]-'a']--;//对right在数组里的字母减1
while(cnt[s2[right]-'a']<0){//数组s2出现或大于s1次数的字母
cnt[s2[left]-'a']++;//对left在数组里的字母加1
left++; //left往右移
}
if(right-left+1==len1){
return true;
}
}
return false;
}