剑指 Offer 05. 替换空格(字符串 双指针法)(Leetcode刷题笔记)

剑指 Offer 05. 替换空格(字符串 双指针法)(Leetcode刷题笔记)

欢迎大家访问我的GitHub博客

https://lunan0320.cn

文章目录

题目

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

示例 1:

输入:s = “We are happy.”
输出:“We%20are%20happy.”

解题代码 C++

解题思路: 先计算空格数,然后resize()方法为其重新分配字符串的长度。
接着用两个指针去依次替换。

class Solution {
public:
    string replaceSpace(string s) {
        int length1 = s.size();
        int count = 0;
        // 先判断有多少的空格
        for (int i = 0; i < length1; i++){
            if (s[i] == ' '){
                count++;
            }
        }
        //为字符串重新划分大小
        s.resize(s.size() + 2 * count );
        
        int length2 = s.size();
        int i = length2 - 1;
        int j = length1 - 1;
        //注意此处的条件
        while(i >= 0 && j >= 0){
            //不是空格的话直接替换
            if (s[j] != ' '){
                s[i] = s[j];
                i--;
                j--;
            }else{
                //遇到空格就替换成%20
                s[i] = '0';
                s[i-1]='2';
                s[i-2]='%';
                i -= 3;
                j--;
            }
        }
        return s;
    }
};

算法效率

时间复杂度O(n)
空间复杂度O(1)

执行用时: 0 ms , 在所有 C++ 提交中击败了100.00% 的用户
内存消耗:6.1 MB , 在所有 C++ 提交中击败了 47.56% 的用户

上一篇:【LeetCode - Java】202. 快乐数 (简单)


下一篇:LeetCode 5984. 拆分数位后四位数字的最小和