3.无重复字符的最长子串
题目
给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。
解题
解题步骤:
- 初始化两个指针,分别指向子串的头和尾
- 初始化一个 map,用于判断子串是否有重复字符
- 循环移动两个指针,直至找到窗口的最大长度
go
func lengthOfLongestSubstring(s string) int {
m := make(map[byte]int)
var l, r, max int
// 左指针移动
for l < len(s) {
// 右指针移动,且没有找到相同元素
for r < len(s) && m[s[r]] == 0 {
m[s[r]]++ // 窗口添加元素
r++ // 右指针移动
}
if len(m) > max {
max = len(m)
}
delete(m, s[l]) // 窗口删除元素
l++ // 左指针移动
}
return max
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22