1.给定一个字符串,请从这个字符串中找出所有最长的没有重复字符的子串,并返回最长不重复子串的长度,例如: 字符串:asdfwedferrf ==> 最长不重复子串:asdfwe,长度6 字符串:wpwswekedw ==> 最长不重复子串:swek, kedw,长度4
时间: 2024-04-29 09:22:41 浏览: 90
解法:
可以使用滑动窗口的方法来解决该问题。
定义一个字典,用于记录每个字符最后出现的位置。定义一个起始位置 start 和最长长度 max_len,初始化为 0。
遍历字符串,如果当前字符不在字典中,或者当前字符在字典中的位置在起始位置之前,则更新字典中当前字符的位置值为当前索引,更新最长长度为当前索引减去起始位置加 1。
如果当前字符在字典中的位置在起始位置之后,则更新起始位置为该字符在字典中的位置加 1。
最后返回最长长度即可。
代码实现如下:
```python
def longestSubstring(s: str) -> int:
char_dict = {}
start, max_len = 0, 0
for i, char in enumerate(s):
if char in char_dict and char_dict[char] >= start:
start = char_dict[char] + 1
char_dict[char] = i
max_len = max(max_len, i - start + 1)
return max_len
```
测试:
```python
print(longestSubstring("asdfwedferrf")) # 6
print(longestSubstring("wpwswekedw")) # 4
```
相关问题
1. 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串的长度
这个问题可以使用滑动窗口(Sliding Window)算法来解决。滑动窗口是一种常用的动态规划思想,通常用于处理数组或字符串中的连续子序列问题。以下是基本思路:
1. 初始化两个指针 left 和 right,分别指向字符串的开始位置,同时创建一个集合(或哈希表)存储已经遇到过的字符。
2. 遍历字符串 s,如果当前字符不在集合中,将其添加到集合,并将 right 指针右移一位,更新最长无重复字符子串的长度(即 right - left + 1)。
3. 如果当前字符已经在集合中,说明遇到了重复字符,此时从集合中删除左边界指针所对应的字符,然后将 left 指针右移一位,继续检查下一个字符。
4. 在遍历过程中,不断更新最长子串的长度,直到遍历完整个字符串。
5. 最终返回最长无重复字符子串的长度。
下面是伪代码示例:
```python
def lengthOfLongestSubstring(s):
max_len = 0
visited = set()
left = 0
for right in range(len(s)):
if s[right] not in visited:
visited.add(s[right])
max_len = max(max_len, right - left + 1)
else:
visited.remove(s[left]) # 移除重复字符
left += 1
return max_len
```
pythonE. 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 例如 输入: abcabcbb 输出: 3 解释: 因为无重复字符的最长子串是"abc",所以其长度为 3。
好的,这是一道经典的字符串问题,可以使用滑动窗口来解决。具体思路如下:
1. 定义一个字典用来存储字符及其对应的下标。
2. 定义左指针 left 和最长子串的长度 max_len,初始值均为 0。
3. 遍历字符串 s,当遇到重复字符时,更新 left 的位置为重复字符的下标加 1,并更新该字符在字典中的下标为当前位置。
4. 每次遍历更新 max_len 的值为当前子串长度和历史最大值的较大值。
5. 遍历结束后,返回 max_len 的值即可。
下面是 Python 代码实现:
```python
def lengthOfLongestSubstring(s: str) -> int:
char_dict = {} # 存储字符及其对应的下标
left = 0 # 左指针
max_len = 0 # 最长子串的长度
for i, c in enumerate(s):
if c in char_dict and char_dict[c] >= left:
left = char_dict[c] + 1 # 更新左指针位置
char_dict[c] = i # 更新字符的下标
max_len = max(max_len, i - left + 1) # 更新最长子串的长度
return max_len
```
对于输入 "abcabcbb",上述代码将返回 3,符合预期。
阅读全文
相关推荐













