sliding window(2

 567. Permutation in String

class Solution:
    def checkInclusion(self, s1: str, s2: str) -> bool:
        # sliding window
        cnt = Counter(s1)
        width = len(s1) # s1的长度 作为维护s2的滑动窗口
        for i in range(len(s2)):
            if s2[i] in cnt:
                cnt[s2[i]] -= 1

            # 这个条件检查当前索引 i 是否至少等于 s1 的长度(即变量 width)。
            # 当 i 等于或大于 width 时,意味着滑动窗口已经完全覆盖了 s1 的长度,可以开始从窗口的左侧移除字符了
            # 这个条件检查即将从窗口中移除的字符(s2[i - width])是否是 s1 中的字符。
            # 如果是,我们需要将该字符的计数在 cnt 中增加回来,因为我们正在将这个字符从当前的窗口中移除
            if i >= width and s2[i - width] in cnt:

                cnt[s2[i - width]] += 1
            if all(cnt[i]==0 for i in cnt):
                return True
        return False

        

424. Longest Repeating Character Replacement

class Solution:
    def characterReplacement(self, s: str, k: int) -> int:
        # sliding window
        count = {}
        max_len = 0
        max_count = 0 
        left = 0

        for right in range(len(s)):
            count[s[right]] = count.get(s[right], 0) + 1
            max_count = max(max_count, count[s[right]])#refresh the max count in the window

            # 如果需要替换的字符数超过k,则收缩窗口
            if right - left + 1 - max_count > k:
                count[s[left]] -= 1
                left += 1
            max_len = max(max_len, right - left + 1)
        return max_len
        
        '''
        right - left + 1:窗口的总长度,表示窗口中包含的字符数。
        max_count:窗口内出现次数最多的字符的出现次数。
        (right - left + 1) - max_count:窗口内除了最多字符以外的字符数量,这些字符就是我们可能需要替换的字符。
        '''


        

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值