剑指 Offer 05. 替换空格

117 阅读2分钟

前言:剑指offer刷题系列

问题:

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例:

输入:s = "We are happy."
输出:"We%20are%20happy."

思路:

一开始看到这个题,我首先想这个一个非常简答的字符串替换题,直接循环判断替换掉字符串中的某些字符即可。

一开始就直接判断,当s[i] === " ",就直接替换为 %20,但是执行了一下没有成功,我还以为代码写错了,思考纠结一下后,搜索了一下才知道js中的字符串一旦被创建,就无法改变,要想改变就必须销毁原来的字符串,用一个包含新值的字符串填充该值才可以。

然后我就重新声明了一个新的字符串,用来存储修改后的字符串,下面这段代码是第二个代码优化后的版本:

用的是三元表达式,arr拼接字符串,当s[i]是空格就拼接"%20",否则就拼接原来的s[i],js的字符串拼接用 + 号连接就可以了,最后输出s[i]即可。

基于上述思考,代码如下:

/**
 * @param {string} s
 * @return {string}
 */
var replaceSpace = function(s) {
    let arr = ''
    for(let i = 0;i < s.length;i++)
    arr += s[i] === " " ? '%20' : s[i];
    return arr
};

执行结果如下图:

image-20230706155102043.png

简化代码版:

看了评论区,发现也可以仅使用 string.replace() 方法来直接替换字符串中的所有空格,而不需要用一个循环。这样既可以简化函数的代码,也可以提高效率。

使用 string.replace() 方法,传入一个正则表达式 / /g 来匹配所有的空格,并用 “%20” 替换它们。例如:

var s = "Hello world";
var replaced = s.replace(/ /g, "%20"); // "Hello%20world"

python代码版:

直接使用python里面的replace函数,replace(old,new,count)可以直接替换,是最简单的方法

class Solution:
    def replaceSpace(self, s: str) -> str:
        return s.replace(' ','%20')

image.png

学到的知识点:

  1. JavaScript的字符串是不可变的,也就是说字符串一旦创建,他们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后用另一个包含新值的字符串填充该变量。
  1. 求字符串的长度,用s.length即可,不要和c++搞混了
  2. null表示空值,表示什么都没有,而要想表示空格,用" ",双引号中有一个空格,双引号里面的空格就是空格
  3. replace 函数是一个字符串方法,它可以用来替换字符串中的一些值或者模式。使用方法:string.replace(pattern, replacement),其中:
  • pattern 可以是一个字符串或者一个正则表达式,表示要搜索的值或者模式;
  • replacement 可以是一个字符串或者一个函数,表示要替换的值或者生成的值。
  • replace 函数会返回一个新的字符串,不会改变原来的字符串。