Skip to content

Commit ad6f394

Browse files
authored
Merge pull request #1280 from serendipity2019/master
011-Week 08
2 parents e74f206 + 03f985e commit ad6f394

File tree

5 files changed

+100
-0
lines changed

5 files changed

+100
-0
lines changed

Week 08/id_011/decode-ways.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package algorithm00401
2+
3+
func numDecodings(s string) int {
4+
if len(s) == 0 || s[:1] == "0" {
5+
return 0
6+
}
7+
a, b := 1, 1
8+
for i := 1; i < len(s); i++ {
9+
if s[i:i+1] == "0" {
10+
a = 0
11+
}
12+
if s[i-1:i] == "1" || (s[i-1:i] == "2" && s[i:i+1] <= "6") {
13+
a = a + b
14+
b = a - b
15+
} else {
16+
b = a
17+
}
18+
}
19+
return a
20+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package algorithm00401
2+
3+
func firstUniqChar(s string) int {
4+
var memo [26]int
5+
for _, c := range s {
6+
memo[c-'a']++
7+
}
8+
for i, c := range s {
9+
if memo[c-'a'] == 1 {
10+
return i
11+
}
12+
}
13+
return -1
14+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package algorithm00401
2+
3+
func isIsomorphic(s string, t string) bool {
4+
m1 := make([]int, 256)
5+
m2 := make([]int, 256)
6+
7+
for i := 0; i < len(s); i++ {
8+
if m1[s[i]-'a'] != m2[t[i]-'a'] {
9+
return false
10+
}
11+
12+
m1[s[i]-'a'] = i + 1
13+
m2[t[i]-'a'] = i + 1
14+
}
15+
16+
return true
17+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package algorithm00401
2+
3+
func reverseOnlyLetters(S string) string {
4+
b := []byte(S)
5+
6+
for l, r := 0, len(b)-1; l < r; {
7+
for l < r && !isBetter(b[l]) {
8+
l++
9+
}
10+
for l < r && !isBetter(b[r]) {
11+
r--
12+
}
13+
b[l], b[r] = b[r], b[l]
14+
l++
15+
r--
16+
}
17+
18+
return string(b)
19+
}
20+
21+
func isBetter(b byte) bool {
22+
return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z')
23+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package algorithm00401
2+
3+
func reverseStr(s string, k int) string {
4+
b := []byte(s)
5+
for i := 0; i < len(s); i++ {
6+
j := minInt(i+k, len(s))
7+
reverse(b[i:j])
8+
}
9+
return string(b)
10+
}
11+
12+
func minInt(i, j int) int {
13+
if i < j {
14+
return i
15+
}
16+
return j
17+
}
18+
19+
func reverse(b []byte) {
20+
i, j := 0, len(b)-1
21+
for i < j {
22+
b[i], b[j] = b[j], b[i]
23+
i++
24+
j--
25+
}
26+
}

0 commit comments

Comments
 (0)