请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1: 输入:s = “We are happy.”
输出:“We%20are%20happy.”
思路1:借助字符串、数组方法
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
let res = s.split(" ");
return res.join("%20");
};
String.split() 执行的操作与 Array.join 执行的操作是相反的。
split() 方法用于把一个字符串分割成字符串数组。
s.replace(" ","%20");
思路2:双指针法
不借助额外的辅助空间进行替换
- 首先扩充数组到每个空格替换成"%20"之后的大小。
- 然后从后向前替换空格,也就是双指针法,过程如下:
- right指向新长度的末尾,left指向旧长度的末尾。
- 如果left只想的值不为空,则s[right] = s[left],然后两个指针同时左移
- 如果left只想的值为空,则依次添加% 2 0
var replaceSpace = function(s) {
let resArr = Array.from(s);
let count = 0;
for(let i = 0;i<resArr.length;i++){
if(resArr[i] === " ") count++;
}
let left = resArr.length-1,right = resArr.length + 2*count - 1;
while(left>=0){
if(resArr[left] === " "){
resArr[right--] = "0";
resArr[right--] = "2";
resArr[right--] = "%";
left--;
}else{
resArr[right--] = resArr[left--]
}
}
return resArr.join("");
}