NOTE

替换空格

记录逐字符拼接和预分配空间两种将空格替换为 %20 的实现。

Data Structures & Algorithms创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

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)
}

4. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看