代码随想录 5

904. 水果成篮

class Solution:
    def totalFruit(self, fruits: List[int]) -> int:
        cnt=Counter()
        left=ans=0
        for right,x in enumerate(fruits):
            cnt[x]+=1
            while len(cnt)>2:
                cnt[fruits[left]]-=1
                if cnt[fruits[left]]==0:
                    cnt.pop(fruits[left])
                left+=1
            ans=max(ans,right-left+1)
        return ans
    官方题解,Counter():好用的计数器
class Solution:
    def minWindow(self, s: str, t: str) -> str:
        left=0
        res=""
        ans=float("inf")
        s_cnt=Counter()
        t_cnt=Counter(t)
        def f (s_cnt,t_cnt):
            for char in t_cnt:
                if t_cnt[char] > s_cnt[char]:
                    return False
            return True
        for right in range(len(s)):
            s_cnt[s[right]]+=1
            while f(s_cnt,t_cnt):
                if right-left+1<ans:
                    ans= right-left+1
                    res=s[left:right+1]
                s_cnt[s[left]]-=1
                left+=1
        return res

困难题加1

难度主要在写f函数
s_cnt[s[left]]-=1不是s_cnt[left]-=1

发表评论