刷题笔记day08-字符串01
344. 反转字符串
思路1:使用双指针的方法,前后交换
func reverseString(s []byte) {
// 思路1:使用双指针进行交换
// 思路2:使用库函数进行交换
for i, j := 0, len(s) - 1; i < j; {
s[i], s[j] = s[j], s[i]
i++
j--
}
}
思路2:使用库文件,进行翻转。目的是为了熟悉库,方便后面工作用。
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
s.reverse()
541. 反转字符串 II
设置好边界条件,然后调用上一题写的双指针交换的函数既可搞定。
func reverseStr(s string, k int) string {
// 双指针法
s2 := []byte(s)
start := 0
length := len(s)
for start < length {
if (start + k >= length) {
reverse(s2, start, length - 1)
} else {
reverse(s2, start, start + k - 1)
}
start += 2*k
}
return string(s2)
}
func reverse(s []byte, start, end int) {
for i, j := start, end; i < j; {
s[i], s[j] = s[j], s[i]
i++
j--
}
}
LCR 122. 路径加密
func replaceSpace(s string) string {
// 使用双指针的方法
by := []byte(s)
spaceCount := 0
for i := 0; i < len(s); i++ {
if s[i] == ' ' {
spaceCount++
}
}
// 为什么是*2,而不是*3,因为原先的空格也占一个空格。
tmp := make([]byte, spaceCount*2)
by = append(by, tmp...) // 用...展开切片
// b是原切片的指针,e是扩容后的指针。从后往前扫,不断的赋值
for b, e := len(s)-1, len(by)-1; e > b; {
if (by[b] == ' ') {
by[e] = '0'
by[e-1] = '2'
by[e-2] = '%'
e -= 2
} else {
by[e] = by[b]
}
b--
e--
}
return string(by)
}