?题目描述
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。
换句话说,第一个字符串的排列之一是第二个字符串的子串。
示例1:
输入: s1 = "ab" s2 = "eidbaooo"
输出: True
解释: s2 包含 s1 的排列之一 ("ba").
示例2:
输入: s1= "ab" s2 = "eidboaoo"
输出: False
?Solution : Sliding Window
class Solution {
public:
bool checkInclusion(string s1, string s2) {
vector<int> c1(26);
vector<int> c2(26);
int l1 = s1.length();
int l2 = s2.length();
for (const auto c : s1) {
// 记录每个字符出现的次数,而不追究它们的排列次序
++c1[c - 'a'];
}
for (int i = 0; i < l2; ++i) {
// 如果大于窗口就删掉窗口前一个元素
if (i >= l1) --c2[s2[i - l1] - 'a'];
++c2[s2[i] - 'a'];
if (c1 == c2) return true; //判断两个vector里面对应元素是否相同
}
return false;
}
};