【剑指 Offer 31 天打卡计划】#6 替换空格

71 阅读1分钟

题目

难度:⭐️

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

示例

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

限制:

0 <= s 的长度 <= 10000

题解

// 方法一
/**
 * @param {string} s
 * @return {string}
 */
var replaceSpace = function(s) {
    let arr = s.split('')
    arr.forEach((item, index)=>{
        if(item === ' '){
            arr[index] = '%20'
        }
    })
    return arr.join('')
};

// 方法二
/**
 * @param {string} s
 * @return {string}
 */
// var replaceSpace = function(s) {
//     let arr = s.split('')
//     arr.forEach((item, index)=>{
//         if(item === ' '){
//             arr[index] = '%20'
//         }
//     })
//     return arr.join('')
// };

var replaceSpace = function(s) {
    let arr = s.split('')
    let length = arr.length
    // 构造数组
    for(let i=0; i<length; i++){
        if(arr[i] === ' '){
            arr.push(' ')
            arr.push(' ')
        }
    }
    console.log(arr)
    let i = arr.length - 1
    let j = s.length - 1
    while(i!==j){
        if(arr[j]!==' '){
            arr[i] = arr[j]
            i -= 1
            j -= 1
        }else{
            arr[i] = '0'
            arr[i-1] = '2'
            arr[i-2] = '%'
            i -= 3
            j -= 1
        }
    }
    return arr.join('')
};

笔记

方法一:原生 join 方法

方法二:因为 JSJS 中字符串无法被修改,一旦给字符串变量重新赋值,就要花费时间和空间去重新新建一个字符串,从而增加了复杂度!

所以我们这里采用数组来进行操作,流程如下:

将字符串转换为数组,然后统计其中的空格数量。

根据空格数量和原有字符串有效字符长度,计算出刚好存放替换后的字符长度的数组。

创建两个指针,一个指数组末尾,一个指字符串有效位的末尾,实现原地修改。

值得注意的是:数组遍历,一定要从后往前遍历,避免从前往后,造成字符被修改,导致错误!