对应LeetCode上的题目:面试题05. 替换空格
题目描述:请实现一个函数,把字符串 s 中的每个空格替换成”%20”。
例:
1 2
| 输入:s = "We are happy." 输出:"We%20are%20happy."
|
题目描述
请实现一个函数,把字符串 s 中的每个空格替换成”%20”。
例:
1 2
| 输入:s = "We are happy." 输出:"We%20are%20happy."
|
解法一,正则表达式
字符串有一个 replace
方法,可以把字符串里面特定的字符转换成我们想要的字符
1 2 3 4 5 6
| var replaceSpace = function(s) { if(!s) return
return s.replace(/ /g, '%20') };
|
一句代码就搞定,这方法真香
解法二
使用字符串的分割 split
和 数组的分割 join
1 2 3 4 5 6
| var replaceSpace = function(s) { if(!s) return
return s.spilt(' ').join('%20') };
|
注意,虽然这种 api
是香,但是只能作为一种辅助的方法,面试官更多想考我们的算法能力和解题思路,这种只能用来当作题目的一种解法
解法三,双指针
遍历原字符串,统计空格和非空格字符个数,计算替换后的新字符的长度,准备两个指针,指针 i 指向原字符串,指针 j 指向新字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| var replaceSpace = function(s) { if(!s || !s.length) { return "" }
let emptyNum = 0, chNum = 0;
for(let i = 0, len = s.length; i < len; i++) { if(s[i] === ' ') { ++emptyNum } else { ++chNum } }
const length = emptyNum * 2 + chNum const chs = new Array(length) for(let i = 0, j = 0; j < s.length; ++j) { if(s[j] === " ") { chs[i++] = "%" chs[i++] = "2" chs[i++] = "0" } else { chs[i++] = s[j] } }
return chs.join("") }
|