Merge pull request #50 from JessonChan/master

Update 3. Longest Substring Without Repeating Characters.go
This commit is contained in:
halfrost
2020-08-19 16:21:28 +08:00
committed by YDZ
2 changed files with 26 additions and 20 deletions

View File

@ -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
} }

View File

@ -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
} }