目录

0567:字符串的排列(★)

力扣第 567 题

题目

给你两个字符串 s1s2 ,写一个函数来判断 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
  • s1s2 仅包含小写字母

分析

类似于问题 0438 ,还更简单一点。

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def checkInclusion(self, s1: str, s2: str) -> bool:
    ct, ct0, k = Counter(), Counter(s1), len(s1)
    for j, char in enumerate(s2):
        ct[char] += 1
        if j >= k:
            ct[s2[j-k]] -= 1
            if ct[s2[j-k]] == 0:
                del ct[s2[j-k]]
        if j >= k-1 and ct == ct0:
            return True
    return False

96 ms