持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情
前言
力扣练习第三天,拒绝思路老化。今天要练习的是替换空格。
题目信息如下:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
/**
* @param {string} s
* @return {string}
*/
/**
* s = "We are happy."
* return "We%20are%20happy."
*/
解法一
说实话,这道题用暴力法已经不是很合适了,会被喷死的。但是,本着由浅入深的原则,还是先实现爆破吧。
var replaceSpace = function(s) {
const arr = s.split('');
for(let i = 0; i < arr.length; i++) {
if(arr[i] === ' ') {
arr[i] = '%20';
}
}
return arr.join('');
};
解法二
说实话,第一种应该没人用吧,因为想到第一种自然而然的就会这样实现:
var replaceSpace = function(s) {
const arr = s.split(' ');
return arr.join('%20');
// 或者一行代码
// return s.split(' ').join('%20');
};
有问题吗?没问题!既然想到了分割,那为何不直接用' '分割呢?利用空格分割,字符串就变为了['We', 'are', 'happy.'],想到了数组转字符串,作拼接直接用替代空格的'%20'作连接符就OK。
解法三
那第二种方法既然想到了,第三种方法自然而然的就浮现在脑海中,做替换为何需这么麻烦,replace一步到位好吧。注意:全局替换,g必不可少
var replaceSpace = function(s) {
return s.replace(/ /g ,'%20');
};
解法四
哎,想到我要说啥了吧,对,能想到第三种解法,那在仔细想想,就会想到replaceAll实现。都不用正则那套全局替换了。
var replaceSpace = function(s) {
return s.replaceAll(' ','%20')
};
这块可能有些伙伴对replaceAll方法比较陌生,下面摘自MDN的介绍:
replaceAll()方法返回一个新字符串,新字符串所有满足pattern的部分都已被replacement替换。pattern可以是一个字符串或一个RegExp,replacement可以是一个字符串或一个在每次匹配被调用的函数。——MDN
注⚠️: 原始字符串保持不变。
至此,这道题暂时告一段落。bye~