Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:
s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000
二、思路分析
- 第一想法是在原字符串插入字符,替换相应的空格,可以调用replace函数进行替换,但是脱离了原本的题意。
- 重新创建一个空的byte数组,遍历原本的字符串,如果遇到空格,则在byte数组中加入”%20”,如果遇到其他字符则直接加入到byte数组中,时间复杂度为O(n)只需要遍历字符串一次,空间复杂度为O(n),引入了新的字符序列。
- 最后将byte数组强制转换为string类型返回。
三、AC 代码
字符数组
func replaceSpace(s string) string {
sbyte := make([]byte,0)
for i := range s {
if s[i] == ' ' {
sbyte = append(sbyte,[]byte{'%','2','0'}...)
}else {
sbyte = append(sbyte,s[i])
}
}
return string(sbyte)
}
使用unicode.IsSpace
func replaceSpace(s string) string {
var ret string
for _, v := range s {
if unicode.IsSpace(v) {
ret += "%20"
} else {
ret += string(v)
}
}
return ret
}
四、总结
这是一道简单题,只需要新建一个byte数组,将后续字符不断插入进数组中即可,如果使用的语言中字符串是可变类型,则可以直接原地修改字符串,例如C++,但是需要拓展原字符串s的长度,新字符串长度等于原字符串长度加上两倍的空格长度。