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 }