滑动窗口
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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码