Skip to content

Commit d0543da

Browse files
committed
Merge pull request #50 from JessonChan/master
Update 3. Longest Substring Without Repeating Characters.go
2 parents 573f51e + 41d701c commit d0543da

File tree

2 files changed

+26
-20
lines changed

2 files changed

+26
-20
lines changed

leetcode/0003.Longest-Substring-Without-Repeating-Characters/3. Longest Substring Without Repeating Characters.go

+13-10
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,23 @@ func lengthOfLongestSubstring(s string) int {
55
if len(s) == 0 {
66
return 0
77
}
8-
// 扩展 ASCII 码的位图表示(BitSet),共有 256 位
9-
var bitSet [256]uint8
8+
var bitSet [256]bool
109
result, left, right := 0, 0, 0
1110
for left < len(s) {
12-
if right < len(s) && bitSet[s[right]] == 0 {
13-
// 标记对应的 ASCII 码为 1
14-
bitSet[s[right]] = 1
15-
right++
16-
} else {
17-
// 标记对应的 ASCII 码为 0
18-
bitSet[s[left]] = 0
11+
// 右侧字符对应的bitSet被标记true,说明此字符在X位置重复,需要左侧向前移动,直到将X标记为false
12+
if bitSet[s[right]] {
13+
bitSet[s[left]] = false
1914
left++
15+
} else {
16+
bitSet[s[right]] = true
17+
right++
18+
}
19+
if result < right-left {
20+
result = right - left
21+
}
22+
if left+result >= len(s) || right >= len(s) {
23+
break
2024
}
21-
result = max(result, right-left)
2225
}
2326
return result
2427
}

website/content/ChapterFour/0003.Longest-Substring-Without-Repeating-Characters.md

+13-10
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,23 @@ func lengthOfLongestSubstring(s string) int {
6060
if len(s) == 0 {
6161
return 0
6262
}
63-
// 扩展 ASCII 码的位图表示(BitSet),共有 256 位
64-
var bitSet [256]uint8
63+
var bitSet [256]bool
6564
result, left, right := 0, 0, 0
6665
for left < len(s) {
67-
if right < len(s) && bitSet[s[right]] == 0 {
68-
// 标记对应的 ASCII 码为 1
69-
bitSet[s[right]] = 1
70-
right++
71-
} else {
72-
// 标记对应的 ASCII 码为 0
73-
bitSet[s[left]] = 0
66+
// 右侧字符对应的 bitSet 被标记 true,说明此字符在 X 位置重复,需要左侧向前移动,直到将X标记为 false
67+
if bitSet[s[right]] {
68+
bitSet[s[left]] = false
7469
left++
70+
} else {
71+
bitSet[s[right]] = true
72+
right++
73+
}
74+
if result < right-left {
75+
result = right - left
76+
}
77+
if left+result >= len(s) || right >= len(s) {
78+
break
7579
}
76-
result = max(result, right-left)
7780
}
7881
return result
7982
}

0 commit comments

Comments
 (0)