通过滑动窗口确定无重复字符的最长子串
 
			Question
给定一个字符串s,编写算法找出其中不含有重复字符的最长子串的长度。
题设要求子串中不出现重复字符,因此可以在遍历过程中将出现过的字符的位置记录在数组中。在出现过的字符再次出现后,当前子串便不再满足条件,因此需要更新子串的起始位置从而重建新子串。
同时,在遍历过程中还需记录每一步的子串长度,并将其与最长子串长度相比较,若大于最长子串长度则对其进行更新。

以字符串“abcabc”为例,首先定义用于遍历数组与充当子串尾指针的变量end,以及子串起始指针start。为了避免子串中出现重复字符,定义一个数组index,其具有两个功能
- 用于记录字符串中每个字符在之前是否出现过
- 用于存储出现重复字符时start应移动到的位置
其中的127位分别对应ASCII码中的前127位。最后定义用于记录子串当前长度的变量length与子串最大长度max_length。
| 1 | int start = 0; | 
对于遍历过程中遍历到的每个字符,定义其index值为end + 1。若某个字符的index值大于start,则说明start值需要更新,即子串中出现了重复字符。此时,在更新子串前,记录当前子串的长度,将其与最大长度比较,并根据比较结果对其进行更新。具体代码如下:
| 1 | for(end = 0;s[end]!='\0';end++){ | 
依照此逻辑执行操作直至遍历至字符串结尾,其完整代码如下:
| 1 | int lengthOfLongestSubstring(char* s){ | 
Python下代码如下
| 1 | class Solution(object): | 
- Title: 通过滑动窗口确定无重复字符的最长子串
- Author: Zielorem
- Created at : 2023-01-12 14:32:23
- Updated at : 2025-05-30 12:39:26
- Link: https://zielorem.github.io/2023/01/12/slide-window-ascii/
- License: This work is licensed under CC BY-NC-SA 4.0.
        Comments