請實現(xiàn)一個函數(shù),把字符串 s 中的每個空格替換成"%20"。
- 示例 :
輸入:s = "We are happy."
輸出:"We%20are%20happy."
限制:0 <= s 的長度 <= 10000
- 解題思路
這道題的解法非常多,利用很多原生 apiapi 就能輕松解決,例如:
- repleace/replaceAll
- encodeURIComponent
- split/join
亦或者直接暴破求解等等...
但是我們清楚,這些肯定都不是被考察的目的,我們需要做的,就是如何在手動實現(xiàn)的過程中,盡量的減少復雜度!
因為 JS 中字符串無法被修改,一旦給字符串變量重新賦值,就要花費時間和空間去重新新建一個字符串,從而增加了復雜度!
所以我們這里采用數(shù)組來進行操作,流程如下:
1.將字符串轉(zhuǎn)換為數(shù)組,然后統(tǒng)計其中的空格數(shù)量。
2.根據(jù)空格數(shù)量和原有字符串有效字符長度,計算出剛好存放替換后的字符長度的數(shù)組。
3.創(chuàng)建兩個指針,一個指數(shù)組末尾,一個指字符串有效位的末尾,實現(xiàn)原地修改。
值得注意的是:數(shù)組遍歷,一定要從后往前遍歷,避免從前往后,造成字符被修改,導致錯誤!
方法一
/**
* @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.");