滑动窗口

func SlideWindow(s, t string){
	mp:=map[byte]int{}
	window:=map[byte]int{}//window是[left,right)区间内的的哈希表
	//根据目标串构建哈希表
	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++
		//进行窗口数据的更新

		/*** debug 输出的位置 ***/
		fmt.Printf("window:[d%,d%]",left,right)
		//判断左侧窗口是否要收缩
		for 判断条件{
			// d 是将移出窗口的字符
			d:=s[left]
			// 左移窗口
			left++
			// 进行窗口内数据的⼀系列更新

		}
	}
}

  实例:力扣76题

 

 

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--
                }
          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 @ 2022-03-16 15:48  ☞@_@  阅读(30)  评论(0编辑  收藏  举报