春招打卡|剑指offer05|替换空格

77 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy." 输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000

二、思路分析

  1. 第一想法是在原字符串插入字符,替换相应的空格,可以调用replace函数进行替换,但是脱离了原本的题意。
  2. 重新创建一个空的byte数组,遍历原本的字符串,如果遇到空格,则在byte数组中加入”%20”,如果遇到其他字符则直接加入到byte数组中,时间复杂度为O(n)只需要遍历字符串一次,空间复杂度为O(n),引入了新的字符序列。
  3. 最后将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的长度,新字符串长度等于原字符串长度加上两倍的空格长度。