[leetcode]剑指 Offer 05. 替换空格

[leetcode]剑指 Offer 05. 替换空格,第1张

[leetcode]剑指 Offer 05. 替换空格

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

示例 1:

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

限制:

0 <= s 的长度 <= 10000

思路:
由于C++的string类型是可变的,于是可以实现时间复杂度O(n),空间复杂度O(1)的算法。

遍历字符串,统计空格个数spaceCount,则新字符串的长度应为原字符串的长度+2*spaceCount。
resize空间之后,从后向前双指针替换字符串。即遇到不是空格,复制字符,继续向前,遇到空格开始将前面三个字符替换为"%20"。直到两指针相遇。

AC代码:(C++)

class Solution {
   public:
    string replaceSpace(string s) {
        int spaceCount = 0, len = s.size();
        for (char c : s) {
            if (c == ' ') {
                spaceCount++;
            }
        }
        s.resize(len + spaceCount * 2);
        int j = s.size() - 1, i = len - 1;
        while (i < j) {
            if (s[i] != ' ') {
                s[j] = s[i];
            } else {
                s[j - 2] = '%';
                s[j - 1] = '2';
                s[j] = '0';
                j -= 2;
            }
            i--;
            j--;
        }
        return s;
    }
};

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4653812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存