剑指 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('')
};