滑动窗口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
func SlideWindow(s, t string){
    mp:=map[byte]int{}
    window:=map[byte]int{}//window是[left,right)区间内的的哈希表
    //根据目标串构建哈希表
    for i:=0;i<len(t);i++{<em id="__mceDel">     mp[t[i]]++
    }
    left,right:=0,0
    valid:=0
    for right<len(s){
        //c是将要移入窗口的字符
        c:=s[right]
        //右移窗口
        right++
        //进行窗口数据的更新
 
        /*** debug 输出的位置 ***/
        fmt.Printf("window:[d%,d%]",left,right)
        //判断左侧窗口是否要收缩
        for 判断条件{
            // d 是将移出窗口的字符
            d:=s[left]
            // 左移窗口
            left++
            // 进行窗口内数据的⼀系列更新
 
        }
    }
}
</em>

  实例:力扣76题

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
func minWindow(s string, t string) string {
    start,end:=0,len(s)*2
    mp:=map[byte]int{}
    window:=map[byte]int{}
    //根据目标串构建哈希表
    for i:=0;i<len(t);i++{
        mp[t[i]]++
    }
    left,right:=0,0
    valid:=0
    for right<len(s){
        //c是将要移入窗口的字符
        c:=s[right]
        //右移窗口
        right++
        //进行窗口数据的更新
        window[c]++
        if mp[c]==window[c]{
            valid++
        }
 
        //判断左侧窗口是否要收缩
        for valid==len(mp){
             //更新最小子串
            if right-left<end-start{
                start=left
                end=right
            }
            // d 是将移出窗口的字符
            d:=s[left]
            // 左移窗口
            left++
            
            // 进行窗口内数据的⼀系列更新
            if val,ok:=mp[d];ok{//判断是否更新valid
                if window[d]==val{
                    valid--
                }<br>          window[d]--
            }
        }
    }
    if end-start>len(s){
        return ""
    }
    return s[start:end]
}

  实例:力扣3题

复制代码
func lengthOfLongestSubstring(s string) int {
    n:=len(s)
    res:=0
    k:=0
    i:=0
    for ;i<n;i++{
        for j:=k;j<i;j++{
            if s[j]==s[i]{
                if res<i-k{
                    res=i-k
                }
                k=j+1
                break
            }
        } 
    }
    if i==n{
        if res<i-k{
            res=i-k
        }
    }
    return res
}
复制代码

 

posted @   ☞@_@  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示