剑指 Offer 05. 替换空格

94 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

剑指 Offer 05. 替换空格

一、题目描述:

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1:

输入:s = "We are happy."

输出:"We%20are%20happy."

限制:

0 <= s 的长度 <= 10000

来源:力扣(LeetCode) 链接:leetcode.cn/problems/ti… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

这部分可以写写:

  1. 这道题考察了什么思想?你的思路是什么?

    哈哈哈哈,这种题目如果只是为了过题,那简直太容易了,我们用编程语言的API即可。

    比如Java的string.replace(" ", "%20")、Python的str.replace(' ','%20')等等。

    但是这样面试官肯定不干,所以我们所有双指针法。

    首先搞一个申请了足够空间strlen(s)+count*2+1的字符数组,然后使用双指针法将原字符串填充至新数组,并进行替换。

  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

    不是一次通过的,用C语言操作字符串总是有些问题。

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

    image-20220618170638984

 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,有机会大家一定要去读一读大型项目或者编程语言的源代码,对我们写代码有很大帮助,大家好,这里是小伞,关注我,不迷路!