题目链接:https://leetcode-cn.com/problems/permutation-in-string
题目描述:
给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。
换句话说,s1 的排列之一是 s2 的 子串 。
示例 1:
输入:s1 = "ab" s2 = "eidbaooo"
输出:true
解释:s2 包含 s1 的排列之一 ("ba").
示例 2:
输入:s1= "ab" s2 = "eidboaoo"
输出:false
提示:
1 <= s1.length, s2.length <= 104
s1 和 s2 仅包含小写字母
题解:
class Solution {
public:
bool checkInclusion(string s1, string s2) {
int len1 = s1.size();
int len2 = s2.size();
if(len1 > len2)
return false;
vector<int> win1(26, 0),win2(26, 0);
for(int i = 0; i < len1; i++) //构建窗长为len1的窗口
{
win1[s1[i] - 'a']++;
win2[s2[i] - 'a']++;
}
if(win1 == win2)
return true;
for(int i = len1; i < len2; i++)
{
win2[s2[i] - 'a']++; //窗口右移的同时左缩
win2[s2[i - len1] - 'a']--;
if(win1 == win2)
return true;
}
return false;
}
};