请实现一个函数,把字符串 s
中的每个空格替换成”%20″。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
题解:
线性遍历法:
// 时间复杂度:O(n)
// 空间复杂度:O(n)
func replaceSpace(s string) string {
b := []byte(s)
result := make([]byte, 0)
for _, char := range b {
if char == ' ' {
result = append(result, "%20"...)
} else {
result = append(result, char)
}
}
return string(result)
}
双指针法(原地修改):
// 时间复杂度:O(n)
// 空间复杂度:O(n)
func replaceSpace(s string) string {
b := []byte(s)
length := len(b)
spaceCount := 0
// 统计字符串中有多少个空格
for _, char := range b {
if char == ' ' {
spaceCount++
}
}
// 根据空格数量扩展原有切片
tmp := make([]byte, spaceCount*2)
b = append(b, tmp...)
// 两个指针分别指向 原字符串的末尾 和 扩展后的切片的末尾
i, j := length-1, len(b)-1
for i >= 0 {
if b[i] != ' ' {
// 不是空格则将字符往后挪到 j 指针当前的位置
b[j] = b[i]
// j 指针左移一位
j--
} else {
// 是空格则将新的字符填入
b[j] = '0'
b[j-1] = '2'
b[j-2] = '%'
// j 指针左移 3 位
j -= 3
}
// i 指针持续左移,不断去寻找下一个字符,直到 i 小于 0 结束
i--
}
return string(b)
}
评论前必须登录!
注册