JS替换空格

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

  • 示例 :

输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:0 <= s 的长度 <= 10000

  • 解题思路

这道题的解法非常多,利用很多原生 apiapi 就能轻松解决,例如:

  • repleace/replaceAll
  • encodeURIComponent
  • split/join
    亦或者直接暴破求解等等…
    但是我们清楚,这些肯定都不是被考察的目的,我们需要做的,就是如何在手动实现的过程中,尽量的减少复杂度!
    因为 JS 中字符串无法被修改,一旦给字符串变量重新赋值,就要花费时间和空间去重新新建一个字符串,从而增加了复杂度!
    所以我们这里采用数组来进行操作,流程如下:
    1.将字符串转换为数组,然后统计其中的空格数量。
    2.根据空格数量和原有字符串有效字符长度,计算出刚好存放替换后的字符长度的数组。
    3.创建两个指针,一个指数组末尾,一个指字符串有效位的末尾,实现原地修改。
    值得注意的是:数组遍历,一定要从后往前遍历,避免从前往后,造成字符被修改,导致错误!

方法一

/**
 * @param {string} s
 * @return {string}
 */
var replaceSpace = function(s) {
    
    
    return s.replaceAll(" ","%20");
};
replaceSpace("We are happy.");

方法二

/**
 * @param {string} s
 * @return {string}
 */
var replaceSpace = function(s) {
    
    
    //return encodeURI(s);
    return encodeURIComponent(s);
};
replaceSpace("We are happy.");

方法三

/**
 * @param {string} s
 * @return {string}
 */
var replaceSpace = function(s) {
    
    
    var arr = s.split(" ");
    return arr.join("%20");
};
replaceSpace("We are happy.");

方法四

/**
 * @param {string} s
 * @return {string}
 */
var replaceSpace = function(s) {
    
    
    s = s.split("");
    let oldLen = s.length;
    let spaceCount = 0;
    for (let i = 0; i < oldLen; i++) {
    
    
        if (s[i] === ' ') spaceCount++;
    }
    s.length += spaceCount * 2;
    for (let i = oldLen - 1, j = s.length - 1; i >= 0; i--, j--) {
    
    
        console.log(s[i],s[j]);
        if (s[i] !== ' ') s[j] = s[i];
        else {
    
    
            s[j - 2] = '%';
            s[j - 1] = '2';
            s[j] = '0';
            j -= 2;
        }
    }
    return s.join('');
};
replaceSpace("We are happy.");

同文简书号欢迎关注:JS替换空格

猜你喜欢

转载自blog.csdn.net/qq_38970408/article/details/122176385