python最长不重复子串
时间: 2023-09-14 22:03:43 浏览: 96
Python的最长不重复子串可以通过滑动窗口算法来解决。具体来说,我们可以使用两个指针left和right表示当前子串的左右端点,用一个集合set来存储当前子串中出现过的字符,如果right指向的字符不在set中,我们将其加入集合并将right右移一位,更新最长子串的长度。如果right指向的字符已经在set中,我们需要将left右移一位并将对应的字符从set中删除,直到我们能够将right指向的字符加入set中为止。这样我们就可以在O(n)的时间复杂度内解决这个问题。
相关问题
python最长不重复子串代码
可以使用滑动窗口来解决,以下是示例代码:
def longestSubstring(s):
# 初始化左右指针和最长子串长度
left, right, max_len = 0, 0, 0
# 初始化字典用于记录字符出现的位置
char_dict = {}
# 遍历字符串
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
# 测试
s = "abcabcbb"
print(longestSubstring(s)) # 输出 3,对应的子串为 "abc"
python最长不重复子串问题:给定一个字符串S,返回S中所有字符的最长不重复子串的长度。如果S为空,返回0。 例如: 输入:S = “abcabcbb” 输出:3 解释:最长不重复子串是"abc",长度为3。 输入:S = “bbbbb” 输出:1 解释:最长不重复子串是"b",长度为1。
可以使用滑动窗口算法来解决这个问题。具体来说,我们可以使用两个指针left和right来表示当前考虑的子串的左右边界,使用一个哈希表来记录每个字符最后一次出现的位置。初始时,left和right都指向字符串的开头,哈希表为空。然后,我们不断地将right向右移动,直到遇到一个重复的字符。此时,我们可以更新最长不重复子串的长度,并将left指向重复字符的下一个位置。同时,我们需要将哈希表中所有在left之前的字符的位置信息删除,以确保我们只考虑当前子串中的字符。最后,我们将right继续向右移动,重复上述过程,直到right到达字符串的末尾。
以下是Python代码实现:
def lengthOfLongestSubstring(s: str) -> int:
n = len(s)
if n == 0:
return 0
left, right = 0, 0
max_len = 0
char_dict = {}
while right < n:
if s[right] in char_dict and char_dict[s[right]] >= left:
left = char_dict[s[right]] + 1
char_dict[s[right]] = right
max_len = max(max_len, right - left + 1)
right += 1
return max_len
输入:S = “abcabcbb”
输出:3
解释:最长不重复子串是"abc",长度为3。
输入:S = “bbbbb”
输出:1
解释:最长不重复子串是"b",长度为1。
阅读全文