数组之数组与字符串的转换

剑指 Offer 05. 替换空格

题目描述

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

示例 1:

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

解法一 :遍历添加

/**
 * @param {string} s
 * @return {string}
 */
var replaceSpace = function(s) {
  let res = ''
  for(let char of s){
    if(char == ' '){
       res = res + '%20' 
    }else{
     res = res + char
    }
  }
  return res
};

解法二:利用原生 api

//repleace/replaceAll
var replaceSpace = function(s) {
  return s.replace(/ /g, '%20')
};
var replaceSpace = function(s) {
  return s.replaceAll(' ', '%20')
};


//split/join
var replaceSpace = function(s) {
  return  s.split(' ').join("%20");
};

解法三:原地修改

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

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

  1. 将字符串转换为数组,然后统计其中的空格数量。
  2. 根据空格数量和原有字符串有效字符长度,计算出刚好存放替换后的字符长度的数组。
  3. 创建两个指针,一个指数组末尾,一个指字符串有效位的末尾,实现原地修改。

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

function replaceSpace( s ) {
    let old = s.length
    s = s.split('')
    let space = 0
    for(let c of s){
        if(c === ' '){
            space++
        }
    }
    s.length += space*2
    for(let i = old-1, j = s.length-1; i >= 0; i--, j--){
        if(s[i] === ' '){
            s[j-2] = '%'
            s[j-1] = '2'
            s[j] = '0'
            j -= 2
        }else{
            s[j] = s[i]
        }
    }
    return s.join('')
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值