题目:给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2 的 子串 。 来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutation-in-string
/**
* @param {string} s1
* @param {string} s2
* @return {boolean}
*/
var checkInclusion = function(s1, s2) {
const len1 = s1.length;
const len2 = s2.length;
const count1 = new Array(26).fill(0);
const count2 = new Array(26).fill(0);
for (let i = 0; i < len1; i++) {
// s1 = 'ab'
// console.log(count1)
// 统计字符串中对应的字母出现的次数
count1[s1[i].charCodeAt(0) - 97]++;
// console.log(count1[s1[i].charCodeAt(0) - 97]++)
// console.log(count1)
}
let start = 0;
for (let i = 0; i < len2; i++) {
// 统计字符串中该字母出现的次数
count2[s2[i].charCodeAt(0) - 97]++;
// start:左滑窗
// i:右滑窗
while (start<=i&& count2[s2[start].charCodeAt(0) - 97]>count1[s2[start].charCodeAt(0) - 97]) {
count2[s2[start].charCodeAt(0) - 97]--;
// 遍历到下一个字母,再进行对比
start++;
// console.log(count2,'count2---')
}
// 当count2中的数和count1中的数一样时,表明找到了该字符串,数组不能比较相等
if (count1.join('') == count2.join('')) {
return true;
}
}
return false;
};
`