滑动窗口算法是一种用于解决字符串或数组问题的常用算法。它通过维护一个窗口,来求解问题。
滑动窗口算法的基本思路是:
1. 初始化左指针和右指针,分别指向窗口的起始位置。
2. 当窗口右指针未到达字符串或数组的末尾时,进行循环:
- 如果当前窗口满足某个条件,更新答案(根据问题要求不同,可以是计算最大值、最小值、求和等)。
- 右指针向右移动,扩大窗口。
- 如果当前窗口不满足条件,左指针向右移动,缩小窗口。
3. 返回结果。
下面是一个示例,用滑动窗口算法解决字符串中最长无重复字符子串的问题。
```python
def longest_substring_without_repeating_characters(s):
n = len(s)
unique_chars = set()
max_length = 0
left, right = 0, 0
while right < n:
if s[right] not in unique_chars:
unique_chars.add(s[right])
max_length = max(max_length, right - left + 1)
right += 1
else:
unique_chars.remove(s[left])
left += 1
return max_length
```
这个算法的时间复杂度是O(n),其中n是字符串的长度。