LeetCode题目
344.反转字符串
题目链接:Reverse String - LeetCode
代码如下:
func reverseString(s []byte) {
left := 0
right := len(s) - 1
for left < right {
s[left], s[right] = s[right], s[left]
left++
right--
}
}
541.反转字符串II
题目链接:Reverse String II - LeetCode
代码如下:
func reverse(s []byte) {
left := 0
right := len(s) - 1
for left < right {
s[left], s[right] = s[right], s[left]
left++
right--
}
}
func reverseStr(s string, k int) string {
ss := []byte(s)
length := len(s)
for i := 0; i < length; i += 2 * k {
if i+k <= length {
reverse(ss[i : i+k])
} else {
reverse(ss[i:length])
}
}
return string(ss)
}
151.翻转字符串里的单词
题目链接:Reverse Words in a String - LeetCode
代码如下:
func removeExtraSpaces(s []byte) string {
slow := 0
for fast := 0; fast < len(s); fast++ {
if s[fast] != ' ' {
if slow != 0 {
s[slow] = ' '
slow++
}
for fast < len(s) && s[fast] != ' ' {
s[slow] = s[fast]
fast++
slow++
}
}
}
return string(s[:slow])
}
func reverse(s []byte, start, end int) []byte {
i, j := start, end
for i < j {
s[i], s[j] = s[j], s[i]
i++
j--
}
return s
}
func reverseWords(s string) string {
s = removeExtraSpaces([]byte(s))
ss := reverse([]byte(s), 0, len(s)-1)
start := 0
for i := 0; i <= len(ss); i++ {
if i == len(ss) || ss[i] == ' ' {
ss = reverse(ss, start, i-1)
start = i + 1
}
}
return string(ss)
}
卡码网题目
54.替换数字
题目链接:54. 替换数字(第八期模拟笔试) (kamacoder.com)
代码如下:
package main
import (
"fmt"
)
func replaceNumber(strByte []byte) string {
oldIndex := len(strByte) - 1
count := 0
for i := 0; i < len(strByte); i++ {
if strByte[i] >= '0' && strByte[i] <= '9' {
count++
}
}
for i := 0; i < count; i++ {
strByte = append(strByte, []byte(" ")...)
}
newIndex := len(strByte) - 1
for oldIndex >= 0 {
if strByte[oldIndex] >= '0' && strByte[oldIndex] <= '9' {
strByte[newIndex] = 'r'
newIndex--
strByte[newIndex] = 'e'
newIndex--
strByte[newIndex] = 'b'
newIndex--
strByte[newIndex] = 'm'
newIndex--
strByte[newIndex] = 'u'
newIndex--
strByte[newIndex] = 'n'
newIndex--
} else {
strByte[newIndex] = strByte[oldIndex]
newIndex--
}
oldIndex--
}
return string(strByte)
}
func main() {
var strByte []byte
fmt.Scanln(&strByte)
newString := replaceNumber(strByte)
fmt.Println(newString)
}
55.右旋转字符串
题目链接:55. 右旋字符串(第八期模拟笔试) (kamacoder.com)
代码如下:
package main
import "fmt"
func reverse(s []byte, start, end int) {
i, j := start, end
for i < j {
s[i], s[j] = s[j], s[i]
i++
j--
}
}
func main() {
var n int
var strByte []byte
fmt.Scanln(&n)
fmt.Scanln(&strByte)
reverse(strByte, 0, len(strByte)-1)
reverse(strByte, 0, n-1)
reverse(strByte, n, len(strByte)-1)
fmt.Println(string(strByte))
}
总结
- 对于线性数据结构,填充或者删除,后序处理会高效的多