题目描述: 给定一个字符串 s,请你找出其中不含有重复字符的最长子串的长度。 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
时间: 2023-12-06 20:02:46 浏览: 33
好的,这是一个经典的字符串问题,可以使用滑动窗口算法来解决。具体思路如下:
1. 定义一个窗口,用来存储不重复的字符,初始为空。
2. 遍历字符串s中的每个字符:
a. 如果该字符不在窗口中,将其加入窗口。
b. 如果该字符已经在窗口中,需要将窗口左侧的字符移除,直到窗口中不再包含该字符。
c. 在每次遍历完一个字符后,更新最长不重复子串的长度。
3. 遍历完整个字符串s后,返回最长不重复子串的长度。
以下是使用Python实现的代码:
```python
def lengthOfLongestSubstring(s: str) -> int:
window = set()
left, right = 0, 0
res = 0
while right < len(s):
if s[right] not in window:
window.add(s[right])
right += 1
res = max(res, len(window))
else:
window.remove(s[left])
left += 1
return res
```
该算法的时间复杂度为O(n),其中n为字符串s的长度。
相关问题
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
题目描述:
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
解题思路:
使用滑动窗口的思想,维护一个窗口,窗口内的元素不重复,每次移动右边界,如果右边界的元素在窗口内出现过,则移动左边界,直到窗口内不再有重复元素。
代码实现:
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度
题目描述:
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,答案必须是一个子串,"pwke" 是一个子序列 而不是子串。
解题思路:
使用滑动窗口的思想,维护一个窗口,窗口内的元素不重复,每次移动右边界,如果右边界的元素已经在窗口内,则移动左边界,直到窗口内的元素不重复为止。
代码实现: