📅  最后修改于: 2023-12-03 15:28:48.127000             🧑  作者: Mango
这是门|门 IT 2005 的第 15 个问题,主要涉及计算机科学中的算法问题,需要使用程序来解决。
给定一个字符串,找出其中最长的不重复子串的长度。
例如,对于字符串 "abcabcbb",最长的不重复子串是 "abc",长度为 3。
一种常见的解法是使用双指针和哈希表。
设 left 和 right 为指向子串开头和结尾的指针,初始时二者都指向字符串开头。
使用哈希表记录每个字符最近出现的位置,设为 pos。
遍历字符串,每次将 right 向右移动一位,并更新哈希表中对应字符的 pos。
如果发现当前字符已经在哈希表中出现过,说明当前子串中出现了重复字符,需要将 left 向右移动,直到重复字符不再出现为止,并更新哈希表。
每移动一次 left 或 right,都需要更新一次最长子串的长度。最终得到的长度即为所求。
实现过程见以下代码片段:
def lengthOfLongestSubstring(s: str) -> int:
n = len(s)
if n == 0:
return 0
char_map = {}
max_len = 1
left = 0
for right in range(n):
c = s[right]
if c in char_map and left <= char_map[c] <= right:
left = char_map[c] + 1
else:
max_len = max(max_len, right - left + 1)
char_map[c] = right
return max_len