给定一个字符串 s ,找出其中不含有重复字符的最长子串的长度代码
时间: 2024-10-20 16:15:41 浏览: 31
在编程中,我们通常使用滑动窗口或者双指针的方法来解决这个问题,这里我会给你一个简洁的Python代码示例:
```python
def lengthOfLongestSubstring(s):
if not s:
return 0
seen = {}
start = maxLength = 0
for end in range(len(s)):
# 如果当前字符已经在seen中并且start还没超过那个位置,说明有重复字符
if s[end] in seen and start <= seen[s[end]]:
start = seen[s[end]] + 1
else:
maxLength = max(maxLength, end - start + 1) # 更新最大长度
seen[s[end]] = end # 把当前字符及其索引添加到字典中
return maxLength
```
这个函数的工作原理是遍历字符串s,维护一个窗口(通过end指针),并在窗口内检查是否有重复字符。如果发现重复,就移动起始点(start)到重复字符之后的第一个未见过的字符处。这样可以保证在任何时候,窗口内的字符都是唯一的。
相关问题
给定一个字符串,找出其中不含有重复字符的最长子串的长度
给定一个字符串,要求找出其中不含有重复字符的最长子串的长度。
这个问题可以使用滑动窗口算法解决。该算法在遍历字符串的过程中,通过维护一个滑动窗口,不断缩小窗口以去除重复字符,从而获得最长的不含有重复字符的子串。
代码实现如下:
```
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
char_dict = {}
max_len = 0
start = 0
for i, c in enumerate(s):
if c in char_dict and char_dict[c] >= start:
start = char_dict[c] + 1
char_dict[c] = i
max_len = max(max_len, i - start + 1)
return max_len
```
给定一个字符串 s ,找出其中不含有重复字符的最长子串的长度代码c语言
在C语言中,可以使用滑动窗口(Sliding Window)算法来解决这个问题。滑动窗口是一种常见的动态规划思想,通过维护一个字符集窗口,每次检查新字符是否已经在集合中,如果不在则加入窗口并更新最大长度,如果在则移除窗口左侧的第一个已重复字符。
下面是一个简单的C语言函数实现:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_CHAR 128
int lengthOfLongestSubstring(char* s) {
int n = strlen(s);
bool char_set[MAX_CHAR] = {false}; // 用于记录字符是否出现过
int left = 0, right = 0;
int maxLength = 0;
while (right < n) {
if (!char_set[s[right]]) {
// 如果字符未出现,则添加到窗口
char_set[s[right]] = true;
maxLength = max(maxLength, right - left + 1); // 更新最大长度
right++;
} else {
// 如果字符已经出现,移除左侧的重复字符
char_set[s[left]] = false; // 将左边界字符设回未出现
left++; // 移动左边界
}
}
return maxLength;
}
// 辅助函数,返回两个数的最大值
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
char str[] = "abcabcbb";
printf("Length of the longest substring without repeating characters: %d\n", lengthOfLongestSubstring(str));
return 0;
}
```
在这个代码中,`lengthOfLongestSubstring` 函数接收一个字符串指针,通过双指针 `left` 和 `right` 的移动,不断更新不含重复字符的子串的左右边界,并计算其长度。
阅读全文