今天这道题也不是很难,但我确实没想到,感觉自己逻辑思维能力太差了。
题目
请实现一个函数,将一个字符串中的空格替换成%20
。 例如,当字符串为We Are Happy.
则经过替换之后的字符串为We%20Are%20Happy.
。
输入
We are Happy.
输出
We%20Are%20Happy.
解题思路
1.直接法
如果不考虑在原来的字符串上替换的话, 那么我们直接再开一个数组,从前往后依次赋值,遇见空格,就填上%20
, 否则就填当前字符。
func replaceSpace(str []byte) []byte {
rlt := make([]byte, 0)
for i:=0; i<len(str); i++ {
if str[i] == []byte(" ")[0] {
rlt = append(rlt, []byte("%20")...)
} else {
rlt = append(rlt, str[i])
}
}
return rlt
}
但这种方法空间复杂度较高,是否可以降低空间复杂度呢?
2.原数组修改
既然不能重新定义一个数组,那么我们可以考虑在本数组上做文章。
func replaceSpace(str []byte) {
count := 0
for i:=0; i<length(str); i++ {
if str[i] == ' '{
count++
}
}
newlength := length(str) + count*2
for i,j := length(str)-1,newlength-1; i>=0 && j>=0; {
if str[i]==' '{
str[j] = '0'
j--
str[j] = '2'
j--
str[j] = '%'
j--
i--
} else {
str[j] = str[i]
j--
i--
}
}
}
这样就实现了在原先的数组上进行空格替换的操作。