567. 字符串的排列: 给你两个字符串 s1
和 s2
,写一个函数来判断 s2
是否包含 s1
的排列。如果是,返回 true
;否则,返回 false
。
换句话说,s1 的排列之一是 s2 的 子串 。
js
输入:s1 = "ab" s2 = "eidbaooo"
输出:true
解释:s2 包含 s1 的排列之一 ("ba").
输入:s1= "ab" s2 = "eidboaoo"
输出:false
js
/**
* @param {string} s1
* @param {string} s2
* @return {boolean}
*/
var checkInclusion = function (s1, s2) {
let map = {};
for (let char of s1) {
if (map[char]) map[char] += 1;
else map[char] = 1;
}
let slider = {};
let start = 0;
let end = 0;
while (end < s2.length) {
let char = s2[end];
if (slider[char]) slider[char] += 1;
else slider[char] = 1;
end++;
// 调整窗口,判断左侧窗口是否要收缩
if (end - start > s1.length) {
slider[s2[start]]--;
start++;
}
if (Object.entries(map).every(([key, value]) => slider[key] === value)) {
return true;
}
}
return false;
};