python 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 提示: 0 <= s.length <= 5 * 104 s 由英文字母、数字、符号和空格组成
时间: 2024-01-24 20:19:06 浏览: 68
python 实现给定一个字符串,找出不含有重复字符的最长子串的长度
5星 · 资源好评率100%
可以使用滑动窗口的方法解决此问题。具体步骤如下:
1. 定义两个指针 left 和 right,分别表示无重复字符子串的左右边界
2. 遍历字符串 s,将 right 指针不断向右移动,并记录每个字符最后一次出现的位置
3. 如果当前遍历到的字符在记录中已经存在,说明出现了重复字符,需要将 left 指针移动到该字符最后一次出现位置的下一位,以保证无重复字符
4. 在每次移动 right 指针时,记录当前无重复字符子串的长度,取最大值即可
下面是 Python 代码实现:
```python
def lengthOfLongestSubstring(s: str) -> int:
# 记录每个字符最后一次出现的位置
char_dict = {}
# 无重复字符子串的左右边界
left = 0
right = 0
max_len = 0
while right < len(s):
# 如果当前字符已经在字典中出现过,更新左边界
if s[right] in char_dict and char_dict[s[right]] >= left:
left = char_dict[s[right]] + 1
char_dict[s[right]] = right
right += 1
# 更新最大长度
max_len = max(max_len, right - left)
return max_len
```
时间复杂度为 O(n),其中 n 是字符串的长度。
阅读全文