leetcode——替换空格

264 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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~