滑动窗口
说起滑动窗口,第一个能想到的是tcp
协议中的滑动窗口(Sliding window)。
在tcp
协议中,通常将滑动窗口用于一种流量控制。通常发送方或者接收方将数据包缓存起来,然后通过滑动窗口来控制需要发送或者接受数据包的数量或大小。
以此来改变吞吐量。
在算法中,滑动窗口也是类似的原理,需要维护一个数组/队列(可以看做tcp中缓存),然后不断的滑动窗口来计算结果。
对于这题,只需要维护一个大小为3的窗口,比较窗口内的字符各不相同即可。
首先准备大小为3的窗口,即i ,i + 1,i + 2为窗口,并且对其值进行比较,如果不相等,符合条件的结果加一。
func countGoodSubstrings(s string) (ans int) {
for i := 0; i <= len(s)-3; i++ {
if s[i] != s[i+1] && s[i+1] != s[i+2] && s[i] != s[i+2] {
ans++
}
}
return ans
}
需注意终止条件需要到len(s)-3
,否则将会越界。
这样我们即可通过n
的复杂度解决问题了。
简单题:
参考:
Tip
此方法或数据结构有更多算法实例,请点击滑动窗口 查看更多