原题
https://leetcode.cn/problems/longest-substring-without-repeating-characters/
思路
双指针,右指针遍历,如果右指针遇到重复字母,那么将左指针移至该字符索引的下一个。
复杂度
时间:O(n)
空间:O(1)
Python代码
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
l = 0
seen = set()
ans = 0
for r in range(len(s)):
ch = s[r]
while ch in seen:
seen.remove(s[l])
l += 1
# 更新集合
seen.add(ch)
ans = max(ans, r - l + 1)
return ans
Go代码
func lengthOfLongestSubstring(s string) int {
// 左指针
left := 0
// 用map存储不重复的子串
seen := make(map[byte]bool)
ans := 0
for right, ch := range s {
// 遇到重复字符
for seen[byte(ch)] {
// 删除字符, 移动左指针
delete(seen, byte(s[left]))
left++
}
seen[byte(ch)] = true
ans = max(ans, right-left+1)
}
return ans
}
本文介绍了在LeetCode问题中,如何使用双指针法解决最长无重复字符子串的问题。Python和Java代码展示了如何利用字典或哈希映射追踪字符及其索引,以达到O(n)的时间复杂度和O(1)的空间复杂度。
649

被折叠的 条评论
为什么被折叠?



