Skip to content

Commit dac647f

Browse files
committed
add solution for id 3
1 parent 13c7946 commit dac647f

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package leetcode
2+
3+
func lengthOfLongestSubstring(s string) int {
4+
if len(s) == 0 {
5+
return 0
6+
}
7+
flags := make([]bool, 256)
8+
maxLen := 1
9+
currentStart := 0
10+
for i := 0; i < len(s); i++ {
11+
key := s[i]
12+
if !flags[key] {
13+
flags[key] = true
14+
continue
15+
}
16+
if i-currentStart > maxLen {
17+
maxLen = i - currentStart
18+
}
19+
for currentStart < i {
20+
if s[currentStart] == s[i] {
21+
currentStart++
22+
break
23+
}
24+
key := s[currentStart]
25+
flags[key] = false
26+
currentStart++
27+
}
28+
}
29+
if len(s)-currentStart > maxLen {
30+
maxLen = len(s) - currentStart
31+
}
32+
33+
return maxLen
34+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package leetcode
2+
3+
import "testing"
4+
5+
func TestLengthOfLongestSubstring(t *testing.T) {
6+
tests := []struct {
7+
input string
8+
expect int
9+
}{
10+
{
11+
input: "aab",
12+
expect: 2,
13+
}, {
14+
input: "abcabcbb",
15+
expect: 3,
16+
}, {
17+
input: "bbbbb",
18+
expect: 1,
19+
}, {
20+
input: "",
21+
expect: 0,
22+
}, {
23+
input: "a",
24+
expect: 1,
25+
}, {
26+
input: "azz",
27+
expect: 2,
28+
}, {
29+
input: "pwwkew",
30+
expect: 3,
31+
}, {
32+
input: "abcdefg",
33+
expect: 7,
34+
}, {
35+
input: " ",
36+
expect: 1,
37+
},
38+
}
39+
for i, item := range tests {
40+
actual := lengthOfLongestSubstring(item.input)
41+
if actual != item.expect {
42+
t.Fatalf("%d expect %d, actual %d\n", i, item.expect, actual)
43+
}
44+
}
45+
}

0 commit comments

Comments
 (0)