剑指 Offer 05. 替换空格 JavaScript实现

139 阅读1分钟

剑指 Offer 05. 替换空格

一、调用API

var replaceSpace = function(s) {
    // 1、按照空格拆成子符数组
    // 2、连接
    return s.split(' ').join('%20')
};

二、字符串转换成数组,使用双指针

因为 JS中字符串无法被修改,一旦给字符串变量重新赋值,就要花费时间和空间去重新新建一个字符串,从而增加了复杂度!所以我们这里采用数组来进行操作。

  • 将字符串转换为数组,然后统计其中的空格数量。(一个空格就加1)
  • 根据空格数量和原有字符串有效字符长度,计算出刚好存放替换后的字符长度的数组。(因为替换的%20是占据三个空格,而之前的空格是一个,所以需要在原来的字符长度上+空格数*2)
  • 使用双指针,一个指向原字符串的末尾,一个指向新字符串的末尾,从后往前遍历。
  • 原字符串是空格的,按照规则替换前三个,原字符串是数字的,直接替换。
var replaceSpace = function(s) {
    // 转换成数组
    s = s.split('')
    // 计算空格数量
    let spaceCount = 0
    for(let i=0; i<s.length; i++){
        if(s[i] == ' '){
            spaceCount++
        }
    }

    // 新的字符串的长度
    let newLength = s.length + spaceCount*2
    // 双指针遍历
    for(let i=s.length-1, j=newLength-1; i<j; i--,j--){
        // 原数组不为空格,就直接把这个字符放到最后
        if(s[i] != " "){
            s[j] = s[i]
        }else{
            s[j] = "0"
            s[j-1] = "2"
            s[j-2] = "%"
            j -= 2
        }
    }
    return s.join('')
};