代码随想录算法训练营第八天 | 344、541、kama54

344. 反转字符串

1
2
3
4
5
6
7
8
9
10
11
package main

func reverseString(s []byte) {
left, right := 0, len(s)-1
for left < right {
s[left], s[right] = s[right], s[left]
left++
right--
}
}

541. 反转字符串 II

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

func reverseStr(s string, k int) string {
b := []byte(s)
for i := 0; i < len(b); i += 2 * k {
start := i
end := i + k - 1
if end >= len(b) {
end = len(b) - 1
}
// 反转从 start 到 end 的子数组
for start < end {
b[start], b[end] = b[end], b[start]
start++
end--
}
}
return string(b)
}

kama54. 替换数字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package main

import "fmt"

func replaceDigits(s []byte) string {
// 预计算结果长度以优化内存分配
numCount := 0
for _, c := range s {
if c >= '0' && c <= '9' {
numCount++
}
}
result := make([]byte, 0, len(s)+5*numCount)

// 填充结果
for i := 0; i < len(s); i++ {
c := s[i]
if c >= '0' && c <= '9' {
result = append(result, []byte("number")...)
} else {
result = append(result, c)
}
}
return string(result)
}

func main() {
var strByte []byte
fmt.Scanln(&strByte)
newString := replaceDigits(strByte)
fmt.Println(newString)
}