LeetCode 剑指 Offer 05. 替换空格
题目链接:LeetCode 剑指 Offer 05. 替换空格
题意:
输入一个字符串 s ,然后将 s 中的每个空格替换成"%20"。
解题思路:
直接遍历一遍字符串,
- 如果当前字符不是空格,则加入到结果中
- 如果是空格,则将“%20”加入到结果集
完整代码如下:
func replaceSpace(s string) string {
var res []byte
for i,n:=0,len(s);i<n;i++{
if s[i] == " "{
res = append(res,'%')
res = append(res,'2')
res = append(res,'0')
}else{
res = append(res,[]byte(s[i]))
}
}
return string(res)
}
也可以实现在原地进行替换:首先将数组扩容到每个空格都替换成“%20”之后的大小,然后从后向前替换空格(双指针法)
代码如下:
// 原地修改
func replaceSpace(s string) string {
b := []byte(s)
length := len(b)
spaceCount := 0
for _, v := range b {// 计算空格数量
if v == ' ' {
spaceCount++
}
}
resizeCount := spaceCount * 2 // 扩展原有切片
tmp := make([]byte, resizeCount)
b = append(b, tmp...)
i,j := length - 1, len(b) - 1
for i >= 0 {
if b[i] != ' ' {
b[j] = b[i]
i--
j--
} else {
b[j] = '0'
b[j-1] = '2'
b[j-2] = '%'
i--
j = j - 3
}
}
return string(b)
}

浙公网安备 33010602011771号