持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
剑指 Offer 05. 替换空格
一、题目描述:
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
来源:力扣(LeetCode) 链接:leetcode.cn/problems/ti… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
这部分可以写写:
-
这道题考察了什么思想?你的思路是什么?
哈哈哈哈,这种题目如果只是为了过题,那简直太容易了,我们用编程语言的API即可。
比如Java的string.replace(" ", "%20")、Python的str.replace(' ','%20')等等。
但是这样面试官肯定不干,所以我们所有双指针法。
首先搞一个申请了足够空间strlen(s)+count*2+1的字符数组,然后使用双指针法将原字符串填充至新数组,并进行替换。
-
做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?
不是一次通过的,用C语言操作字符串总是有些问题。
-
有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?
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('');
};
作者:demigodliu
链接:https://leetcode.cn/problems/ti-huan-kong-ge-lcof/solution/tu-jie-guan-fang-tui-jian-ti-jie-ti-huan-3l74/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
三、AC 代码:
char* replaceSpace(char* s){
int count = 0;
for (int i = 0; i < strlen(s); i ++) {
if (s[i] == ' ') {
count ++;
}
}
int num = strlen(s)+count*2+1;
char * s1 = (char *)malloc(sizeof(char)* num);
int k = 0;
for (int j = 0; j < strlen(s); j++) {
if (s[j] == ' ') {
s1[k] = '%';
s1[k+1] = '2';
s1[k+2] = '0';
k = k + 3;
} else {
s1[k++] = s[j];
}
}
s1[k] = '\0';
return s1;
}
四、总结:
如果你还有更多的思考、分析、总结,通通都加上来吧~
剑指 Offer 05. 替换空格
这道题其实就是让我们写一个replace的API,有机会大家一定要去读一读大型项目或者编程语言的源代码,对我们写代码有很大帮助,大家好,这里是小伞,关注我,不迷路!