最长无重复子数组c语言结题思路
时间: 2023-08-24 21:32:08 浏览: 40
求最长无重复子数组的问题可以使用滑动窗口来解决。具体思路如下:
1. 定义一个字典用于存储每个字符最近出现的位置。
2. 定义左右指针left和right,分别表示当前子数组的左右边界。
3. 遍历整个数组,当遇到重复字符时,更新左指针的位置为当前重复字符的下一个位置。
4. 在遍历过程中,计算当前子数组的长度,并更新最大长度。
5. 最终返回最大长度即可。
以下是C语言代码实现:
```c
int lengthOfLongestSubstring(char * s){
int dict[128] = {0}; // 定义字典
int left = 0, right = 0, max_len = 0;
while (s[right] != '\0') {
if (dict[s[right]] > 0 && dict[s[right]] > left) {
// 当前字符出现过,更新左指针位置
left = dict[s[right]];
}
dict[s[right]] = right + 1; // 更新字符最近出现的位置
right++;
max_len = fmax(max_len, right - left); // 更新最大长度
}
return max_len;
}
```
注意,这里的dict数组是用来存储每个字符最近出现的位置的,因此可以使用ASCII码作为下标。同时,在更新左指针位置时,需要判断当前字符是否在当前子数组中出现过。