LeetCode 340. 至多包含 K 个不同字符的最长子串(滑动窗口)

 

 

最多包含k个字符类型的子串

注意的是,k标识字符类型,不是次数 

func findStr(s string,k int)int{
    mxAns:=0
    sLen:=len(s)
    if sLen<=k{
        return sLen
    }
    mp :=make(map[byte]int)
    le:=0;ri:=0    //左右指针维护一个窗口,mp记录窗口内每个元素出现次数,len(mp)标识窗口内元素种类个数
    for ri=0;ri<sLen;ri++{
        mp[s[ri]]++
        for len(mp)>k { //窗口内key个数大于k的时候,就要考虑移动左指针
            mp[s[le]]-- //这里不能移到下面去,否则会出现负数
            if mp[s[le]]==0{//如果左指针元素只出现一次,淘汰这个元素,并且更新窗口大小
                delete(mp,s[le])
            }
            le++
        }
        mxAns=getMax(mxAns,ri-le+1)
    }
    return mxAns
}

 

posted @ 2022-06-26 19:19  知道了呀~  阅读(194)  评论(0编辑  收藏  举报