剑指Offer 05.替换空格 | 算法

127 阅读1分钟

剑指Offer 05.替换空格:力扣题目链接

题目

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

示例 1:

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

限制:0 <= s 的长度 <= 10000

思路

  • 扩充数组至替换后的大小;
  • 使用双指针法将数组从后往前替换空格(i指向新长度的末尾,j指向旧长度的末尾,如下图所示) image.gif

JavaScript

 * @param {string} s
 * @return {string}
 */
var replaceSpace = function(s) {
    //字符串转换成数组
    // const strArr = Array.from(s)
    strArr = s.split('')
    let count = 0

    //计算空格的数量
    for (let i = 0; i < strArr.length; i++) {
        if (strArr[i] === ' '){
            count++
        }
    }

    //替换空格为%20
    let left = strArr.length - 1
    let right = strArr.length + count * 2 - 1 //这里*2是因为%20位三字符长度,减去原有的1个空格

    while (left >= 0) {
        if (strArr[left] === ' ') {
            strArr[right--] = '0'
            strArr[right--] = '2'
            strArr[right--] = '%'
            left--
        } else {
            strArr[right--] = strArr[left--]
        }
    }

    //数组复原为字符串
    return strArr.join('')
};

使用正则表达式

var replaceSpace = function(s) { 
    return s.replace(/\s/g,"%20"); 
};

js小技巧【很神奇】

var replaceSpace = function(s) {
     // 1.将字符串转换为数组,使用 js 字符串方法 `split(' ')`
    let res = s.split(' '); 
  // 2.将数组转化为字符串,使用 js 数组方法`join('%20')`
    let newS = res.join('%20');
    return newS;
};