请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
- 示例 :
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:0 <= s 的长度 <= 10000
- 解题思路
这道题的解法非常多,利用很多原生 apiapi 就能轻松解决,例如:
- repleace/replaceAll
- encodeURIComponent
- split/join
亦或者直接暴破求解等等…
但是我们清楚,这些肯定都不是被考察的目的,我们需要做的,就是如何在手动实现的过程中,尽量的减少复杂度!
因为 JS 中字符串无法被修改,一旦给字符串变量重新赋值,就要花费时间和空间去重新新建一个字符串,从而增加了复杂度!
所以我们这里采用数组来进行操作,流程如下:
1.将字符串转换为数组,然后统计其中的空格数量。
2.根据空格数量和原有字符串有效字符长度,计算出刚好存放替换后的字符长度的数组。
3.创建两个指针,一个指数组末尾,一个指字符串有效位的末尾,实现原地修改。
值得注意的是:数组遍历,一定要从后往前遍历,避免从前往后,造成字符被修改,导致错误!
方法一
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
return s.replaceAll(" ","%20");
};
replaceSpace("We are happy.");
方法二
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
//return encodeURI(s);
return encodeURIComponent(s);
};
replaceSpace("We are happy.");
方法三
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
var arr = s.split(" ");
return arr.join("%20");
};
replaceSpace("We are happy.");
方法四
/**
* @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--) {
console.log(s[i],s[j]);
if (s[i] !== ' ') s[j] = s[i];
else {
s[j - 2] = '%';
s[j - 1] = '2';
s[j] = '0';
j -= 2;
}
}
return s.join('');
};
replaceSpace("We are happy.");
同文简书号欢迎关注:JS替换空格