滑动窗口
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 }

浙公网安备 33010602011771号