Skip to content
On this page

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;
};

Released under the MIT License.