题目
难度:⭐️
请实现一个函数,把字符串 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 中字符串无法被修改,一旦给字符串变量重新赋值,就要花费时间和空间去重新新建一个字符串,从而增加了复杂度!
所以我们这里采用数组来进行操作,流程如下:
将字符串转换为数组,然后统计其中的空格数量。
根据空格数量和原有字符串有效字符长度,计算出刚好存放替换后的字符长度的数组。
创建两个指针,一个指数组末尾,一个指字符串有效位的末尾,实现原地修改。
值得注意的是:数组遍历,一定要从后往前遍历,避免从前往后,造成字符被修改,导致错误!