(本合集全部为Go语言实现)
Leetcode344
状态:秒了
实现过程中的难点:对撞双指针
个人写法
func reverseString(s []byte) {
for i, j := 0, len(s) - 1; i < j; i, j = i + 1, j - 1 {
s[i], s[j] = s[j], s[i]
}
}
Leetcode541
状态:秒了
实现过程中的难点:印象比较深刻,这种跨度的题每次循环就直接加一个跨度,而不是自己去计数
个人写法
func reverseStr(s string, k int) string {
arr := []byte(s)
for i := 0; i < len(arr); i += 2 * k {
m, n := i, i + k - 1
if i + k - 1 >= len(arr) {
n = len(arr) - 1
}
for m < n {
arr[m], arr[n] = arr[n], arr[m]
m, n = m + 1, n - 1
}
}
return string(arr)
}
卡码54
状态:基本秒了,go语言的写法卡了一下
实现过程中的难点:基本就是利用各个语言的类似StringBuilder
来实现
个人写法
卡码网的Golang版本好像是比较低,没有
strings.Builder
,但是可以采用低版本的bytes.Buffer
平替一下
package main
import (
"bytes"
"fmt"
)
func main() {
var s string
fmt.Scanln(&s)
var builder bytes.Buffer
for _, c := range []byte(s) {
if c >= 'a' && c <= 'z' {
builder.WriteByte(c)
} else {
builder.WriteString("number")
}
}
fmt.Println(builder.String())
}
Leetcode151
状态:比较耗时间
实现过程中的难点:翻转题目可以考虑转换为数组某个段落的翻转。本题我的思路是先将字符串中的单词间空格和首尾空格去除掉,并将每个单词做翻转,再把这部分整体做翻转,即可达成最终的效果
个人写法
func reverseWords(s string) string {
slow, fast:= -1, 0
arr := []byte(s)
var start int
for fast < len(s) {
if arr[fast] != ' ' {
arr[slow + 1] = arr[fast]
slow++
if slow > 0 && arr[slow - 1] == ' ' {
start = slow
}
fast++
} else {
if slow >= 0 && arr[slow] != ' ' {
arr[slow + 1] = ' '
slow++
for m, n := start, slow - 1; m < n; m, n = m + 1, n - 1 {
arr[m], arr[n] = arr[n], arr[m]
}
} else {
fast++
}
}
}
if (arr[slow] == ' ') {
slow--
} else {
for m, n := start, slow; m < n; m, n = m + 1, n - 1 {
arr[m], arr[n] = arr[n], arr[m]
}
}
for m, n := 0, slow; m < n; m, n = m + 1, n - 1 {
arr[m], arr[n] = arr[n], arr[m]
}
return string(arr[:slow + 1])
}
卡码55
状态:还可以
实现过程中的难点:原地旋转,需要快速想到转换成翻转的思路
个人写法
package main
import (
"fmt"
)
func main() {
var k int
fmt.Scanln(&k)
var s string
fmt.Scanln(&s)
arr := []byte(s)
for i, j := 0, len(arr) - 1; i < j; i, j = i + 1, j - 1 {
arr[i], arr[j] = arr[j], arr[i]
}
for i, j := 0, k - 1; i < j; i, j = i + 1, j - 1 {
arr[i], arr[j] = arr[j], arr[i]
}
for i, j := k, len(arr) - 1; i < j; i, j = i + 1, j - 1 {
arr[i], arr[j] = arr[j], arr[i]
}
fmt.Println(string(arr))
}
今日收获
- 学习到了go的
Builder
的使用 - 学到了字符串题目中,翻转是一个思路,可以作为变体题目的一个重要思路
学习时长:2小时左右
标签:卡码,arr,slow,string,fmt,随想录,len,lc344 From: https://www.cnblogs.com/geJoyo/p/17891434.html