mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 16:36:41 +08:00
Merge pull request #50 from JessonChan/master
Update 3. Longest Substring Without Repeating Characters.go
This commit is contained in:
@ -5,20 +5,23 @@ func lengthOfLongestSubstring(s string) int {
|
|||||||
if len(s) == 0 {
|
if len(s) == 0 {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
// 扩展 ASCII 码的位图表示(BitSet),共有 256 位
|
var bitSet [256]bool
|
||||||
var bitSet [256]uint8
|
|
||||||
result, left, right := 0, 0, 0
|
result, left, right := 0, 0, 0
|
||||||
for left < len(s) {
|
for left < len(s) {
|
||||||
if right < len(s) && bitSet[s[right]] == 0 {
|
// 右侧字符对应的bitSet被标记true,说明此字符在X位置重复,需要左侧向前移动,直到将X标记为false
|
||||||
// 标记对应的 ASCII 码为 1
|
if bitSet[s[right]] {
|
||||||
bitSet[s[right]] = 1
|
bitSet[s[left]] = false
|
||||||
right++
|
|
||||||
} else {
|
|
||||||
// 标记对应的 ASCII 码为 0
|
|
||||||
bitSet[s[left]] = 0
|
|
||||||
left++
|
left++
|
||||||
|
} else {
|
||||||
|
bitSet[s[right]] = true
|
||||||
|
right++
|
||||||
|
}
|
||||||
|
if result < right-left {
|
||||||
|
result = right - left
|
||||||
|
}
|
||||||
|
if left+result >= len(s) || right >= len(s) {
|
||||||
|
break
|
||||||
}
|
}
|
||||||
result = max(result, right-left)
|
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
@ -60,20 +60,23 @@ func lengthOfLongestSubstring(s string) int {
|
|||||||
if len(s) == 0 {
|
if len(s) == 0 {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
// 扩展 ASCII 码的位图表示(BitSet),共有 256 位
|
var bitSet [256]bool
|
||||||
var bitSet [256]uint8
|
|
||||||
result, left, right := 0, 0, 0
|
result, left, right := 0, 0, 0
|
||||||
for left < len(s) {
|
for left < len(s) {
|
||||||
if right < len(s) && bitSet[s[right]] == 0 {
|
// 右侧字符对应的 bitSet 被标记 true,说明此字符在 X 位置重复,需要左侧向前移动,直到将X标记为 false
|
||||||
// 标记对应的 ASCII 码为 1
|
if bitSet[s[right]] {
|
||||||
bitSet[s[right]] = 1
|
bitSet[s[left]] = false
|
||||||
right++
|
|
||||||
} else {
|
|
||||||
// 标记对应的 ASCII 码为 0
|
|
||||||
bitSet[s[left]] = 0
|
|
||||||
left++
|
left++
|
||||||
|
} else {
|
||||||
|
bitSet[s[right]] = true
|
||||||
|
right++
|
||||||
|
}
|
||||||
|
if result < right-left {
|
||||||
|
result = right - left
|
||||||
|
}
|
||||||
|
if left+result >= len(s) || right >= len(s) {
|
||||||
|
break
|
||||||
}
|
}
|
||||||
result = max(result, right-left)
|
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user