Leetcode:剑指Offer 05.替换空格

119 阅读1分钟

力扣题目链接

题意:

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

image.png

思路:

  • JS有内置的库函数,直接return s.replaceAll(' ',%20)
  • 因为字符串是不能更改的,所以要把字符串转换为数组。这时因为%20的空间是大于空格的,我们要对数组进行扩充。出现一个空格,我们就要多扩展两个长度。
  • 计算有多少个空格,再用双指针从后往前的对数组进行扩充
  • 左指针从原数组的末尾向左进行遍历,遇到空格则让右指针进行%20的填充,遇到字符,则将字符赋给右指针的指向。左指针和右指针一同向左遍历,直到左指针从后往前遍历完整个数组
/**
 * @param {string} s
 * @return {string}
 */
var replaceSpace = function(s) {
    let arr = s.split('')
    let count = 0
    for(let i = 0;i<arr.length;i++){
        if(arr[i]==' '){
            count++
        }
    }

    let left = arr.length-1
    let right = arr.length+2*count-1

    for(let i=left;i>=0;i--){
        if(arr[i]!==' '){
            arr[right] = arr[i]
            right--
        }else{
            arr[right] = '0'
            arr[right-1] = '2'
            arr[right-2] = '%'
            right -= 3
        }
    }
    return arr.join('')
};