Update solution 0003

This commit is contained in:
YDZ
2021-05-13 16:10:41 +08:00
parent e72e4cb599
commit 851946dc9a
7 changed files with 53 additions and 41 deletions

View File

@ -8,7 +8,7 @@ func lengthOfLongestSubstring(s string) int {
var bitSet [256]bool
result, left, right := 0, 0, 0
for left < len(s) {
// 右侧字符对应的bitSet被标记true说明此字符在X位置重复,需要左侧向前移动,直到将X标记为false
// 右侧字符对应的 bitSet 被标记 true说明此字符在 X 位置重复,需要左侧向前移动,直到将 X 标记为 false
if bitSet[s[right]] {
bitSet[s[left]] = false
left++
@ -26,23 +26,28 @@ func lengthOfLongestSubstring(s string) int {
return result
}
// 解法二 滑动窗口-数组桶
// 解法二 滑动窗口
func lengthOfLongestSubstring1(s string) int {
right, left, res := 0, 0, 0
var indexes [256]int
for left < len(s) {
tmp := indexes[s[left]-'a']
if tmp >= right {
right = tmp + 1
}
indexes[s[left]-'a'] = left
left++
res = max(res, left-right)
if len(s) == 0 {
return 0
}
return res
var freq [256]int
result, left, right := 0, 0, -1
for left < len(s) {
if right+1 < len(s) && freq[s[right+1]-'a'] == 0 {
freq[s[right+1]-'a']++
right++
} else {
freq[s[left]-'a']--
left++
}
result = max(result, right-left+1)
}
return result
}
// 解法 滑动窗口-哈希桶
// 解法 滑动窗口-哈希桶
func lengthOfLongestSubstring2(s string) int {
right, left, res := 0, 0, 0
indexes := make(map[byte]int, len(s))

View File

@ -51,7 +51,7 @@ func Test_Problem3(t *testing.T) {
for _, q := range qs {
_, p := q.ans3, q.para3
fmt.Printf("【input】:%v 【output】:%v\n", p, lengthOfLongestSubstring_(p.s))
fmt.Printf("【input】:%v 【output】:%v\n", p, lengthOfLongestSubstring(p.s))
}
fmt.Printf("\n\n\n")
}