前言:剑指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
};
执行结果如下图:
简化代码版:
看了评论区,发现也可以仅使用 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')
学到的知识点:
- JavaScript的字符串是不可变的,也就是说字符串一旦创建,他们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后用另一个包含新值的字符串填充该变量。
- 求字符串的长度,用s.length即可,不要和c++搞混了
- null表示空值,表示什么都没有,而要想表示空格,用" ",双引号中有一个空格,双引号里面的空格就是空格
- replace 函数是一个字符串方法,它可以用来替换字符串中的一些值或者模式。使用方法:string.replace(pattern, replacement),其中:
- pattern 可以是一个字符串或者一个正则表达式,表示要搜索的值或者模式;
- replacement 可以是一个字符串或者一个函数,表示要替换的值或者生成的值。
- replace 函数会返回一个新的字符串,不会改变原来的字符串。