摒弃世俗浮躁
追求技术精湛

【力扣】剑指 Offer 05. 替换空格

请实现一个函数,把字符串 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)
}
赞(0) 打赏
未经允许不得转载:时光日记 » 【力扣】剑指 Offer 05. 替换空格

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册