题目如下:
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
尝试:
思路:利用split()方法,将字符串变为数组,再进行拼接。
代码如下:
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
let n = s.split(" ");
let replaceS = "";
for(let i = 0;i<n.length - 1;i++){
replaceS = replaceS + n[i] + "%20";
};
return replaceS + n[n.length - 1];
};
通过了测试用例。
好的解法:
- 将字符串转换为数组,然后统计其中的空格数量。
- 根据空格数量和原有字符串有效字符长度,计算出刚好存放替换后的字符长度的数组。
- 创建两个指针,一个指数组末尾,一个指字符串有效位的末尾,实现原地修改。
注意:join()方法用来把数组中所有的元素转换为字符串,参数为指定的分隔符。
代码如下:
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
s = s.split("");
let oldLen = s.length;
let spaceCount = 0;
for(let i = 0;i<oldLen;i++){
if(s[i] === " ") spaceCount++;
};
s.length += spaceCount * 2;
for(let i = oldLen - 1,j = s.length - 1;i >= 0;i--,j--){
if(s[i] !== " "){
s[j] = s[i];
}else{
s[j-2] = "%";
s[j-1] = "2";
s[j] = "0";
j -= 2;
};
};
return s.join("");
};