返回
巧破密码 - 算法 3:无重复字符的最长子串
Android
2024-02-13 14:25:01
各位编程爱好者,大家好!欢迎来到算法探秘之旅的第三站。今天,我们将共同探索算法 3:无重复字符的最长子串,了解如何找出给定字符串中不含有重复字符的最长子串的长度。
问题
假设我们有一个字符串s,它由小写字母组成。我们的目标是找出s中不含有重复字符的最长子串的长度。例如,对于字符串"abcabcbb",最长子串是"abc",长度为3。而对于字符串"bbbbb",最长子串是"b",长度为1。
算法步骤
-
初始化 :
- 定义变量start和end,分别指向s的开头和结尾。
- 定义变量maxLength,用于存储最长子串的长度。
-
循环遍历字符串 :
- 使用while循环遍历字符串s。
-
更新end :
- 如果end指向的字符不存在于从start到end-1的子串中,则将end右移一位。
-
更新maxLength :
- 如果end - start + 1大于maxLength,则将maxLength更新为end - start + 1。
-
循环结束 :
- 当end到达s的末尾时,循环结束。
-
返回结果 :
- 返回maxLength。
示例代码
def length_of_longest_substring(s):
"""
:type s: str
:rtype: int
"""
start = 0
end = 0
maxLength = 0
char_index = {}
while end < len(s):
if s[end] not in char_index or char_index[s[end]] < start:
maxLength = max(maxLength, end - start + 1)
char_index[s[end]] = end
end += 1
else:
start = char_index[s[end]] + 1
char_index[s[end]] = end
return maxLength
print(length_of_longest_substring("abcabcbb")) # 3
print(length_of_longest_substring("bbbbb")) # 1
print(length_of_longest_substring("pwwkew")) # 3
结语
至此,我们就完成了算法 3:无重复字符的最长子串的学习。希望大家能够融会贯通,将其应用到实际编程中。期待我们下一次的相遇,让我们继续探索算法世界的奥秘。