剑指Offer面试题05-替换空格

Posted galaxy-hao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer面试题05-替换空格相关的知识,希望对你有一定的参考价值。

题目

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

示例 1:

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

限制:
0 <= s 的长度 <= 10000

思路:双指针

暴力方法,从前向后遍历,遇到空格就替换,则每次替换需要移动空格后面O(n)个字符,所以总时间复杂度为O(n^2)。
我们可以先计算出空格数,然后可得替换后新串总长度,设两个指针i和j分别指向原来字符串末尾和新串末尾,向前移动指针,如果遇到空格就替换,否则将原来字符移到新的位置。

代码

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

class Solution {
public:
    string replaceSpace(string s) {        
        if (s.empty()) return s;
        int cnt = 0;
        for (char c : s) {
            if (c == ' ') ++cnt;
        }        
        int oldLen = s.size(), newLen = cnt * 2 + oldLen, j = newLen - 1;
        s.resize(newLen);               
        for (int i = oldLen - 1; i >= 0 && j != i; --i) {
            if (s[i] == ' ') {
                s[j--] = '0';
                s[j--] = '2';
                s[j--] = '%';                
            } else {
                s[j--] = s[i];                
            }
        }        
        return s;
    }
};

以上是关于剑指Offer面试题05-替换空格的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer面试题05-替换空格

剑指offer面试题 5. 替换空格

剑指offer字符串面试题 替换空格

[剑指offer]面试题4:替换空格

剑指offer——面试题5:替换空格

《剑指offer》刷题目录