NOTE
替换空格
记录逐字符拼接和预分配空间两种将空格替换为 %20 的实现。
这是历史学习笔记,可能存在过时或不完整的理解。
1. 题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
2. 思路
- 暴力法
- 预分配空间:先分配好空间再遍历,避免创建小字符串
3. 实现
3.1. 暴力法
// 暴力法
// 时间:O(n)
// 空间:O(n)
func ReplaceSpace(s string) string {
if s == "" {
return ""
}
res := ""
for _, ch := range s {
if string(ch) == " " {
res += "%20"
continue
}
res += string(ch)
}
return res
}
3.2. 预分配内存
// 预分配内存
// 时间:O(n)
// 空间:O(n)
func ReplaceSpace(s string) string {
if s == "" {
return ""
}
count := 0
for _, ch := range s {
if ch == ' ' {
count++
}
}
res := make([]byte, 0, count*2+len(s))
for i := 0; i < len(s); i++ {
if s[i] == ' ' {
res = append(res, '%', '2', '0')
continue
}
res = append(res, s[i])
}
return string(res)
}
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看