344 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
思考:这题挺简单的,双指针所指的值互换就好了。
func reverseString(s []byte) {
n := len(s)
left := 0
right := n-1
for left<=right{
s[left], s[right] = s[right], s[left]
left++
right--
}
}
541反转字符串 II
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
思考:尝试写了一下,对于循环何时结束没考虑好。主要还是看了解题思路。。循环步长为2k, 循环条件为i<n
func reverseStr(s string, k int) string {
bList := []byte(s)
length := len(bList)
for i:=0;i<length;i+=2*k{
if i+k<=length{ //这个地方比较绕,i+k小于等于k的时候,就意味着剩下的字符数大于等于k,只反转前k个
revers(bList[i:i+k])
}else{
revers(bList[i:length]) //i+k 大于长度,说明剩下的字符数量小于k,反转剩下所有字符。
}
}
return string(bList)
}
func revers(b []byte){
left := 0
right := len(b)-1
for left<=right{
b[left], b[right] = b[right], b[left]
left++
right--
}
}
剑指 Offer 05. 替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
思考:本来是想直接用python进行替换的,但是感觉不能这样做。。后来看解题,才知道先扩大字符串长度,然后双指针一一替换,记得从后往前,这样不用再后移字符
class Solution:
def replaceSpace(self, s: str) -> str:
h = s.replace(' ', '%20')
return h
func replaceSpace(s string) string {
spaceCount := 0
sBlock := []byte(s)
length := len(sBlock)
for _, r := range sBlock{
if r == ' '{
spaceCount++
}
}
tmp := make([]byte, 2*spaceCount)
sBlock = append(sBlock, tmp...)
left, right := length-1, len(sBlock)-1
for left>=0{
if sBlock[left] != ' '{
sBlock[right] = sBlock[left]
right--
}else{
sBlock[right] = '0'
sBlock[right-1] = '2'
sBlock[right-2] = '%'
right -= 3
}
left--
}
return string(sBlock)
}