zoukankan      html  css  js  c++  java
  • 剑指 Offer 05. 替换空格

    在部分编程语言中,我们可以动态地将原数组长度扩大,此时我们就可以使用双指针算法,来降低空间的使用:

    1. 首先遍历一遍原数组,求出最终答案的长度length;
    2. 将原数组resize成length大小;
    3. 使用两个指针,指针i指向原字符串的末尾,指针j指向length的位置;
    4. 两个指针分别从后往前遍历,如果str[i] == ' ',则指针j的位置上依次填充'0', '2', '%',这样倒着看就是"%20";如果str[i] != ' ',则指针j的位置上填充该字符即可。

    由于i之前的字符串,在变换之后,长度一定不小于原字符串,所以遍历过程中一定有i <= j,这样可以保证str[j]不会覆盖还未遍历过的str[i],从而答案是正确的。

    class Solution {
    public:
        string replaceSpace(string s) {
            int len = 0;
            for(char &c : s)
                if(c == ' ') len += 3;
                else len++;
            
            int i = s.size(), j = len;
            s.resize(len);
    
            while(i >= 0)
            {
                if(s[i] == ' ')
                {
                    s[j--] = '0';
                    s[j--] = '2';
                    s[j--] = '%';
                }
                else
                    s[j--] = s[i];
                i--;
            }
            return s;
        }
    };
    
  • 相关阅读:
    HDU6397
    容斥原理推导错排通项公式
    重复排列的证明
    圆排列证明
    rock-paper-scissors
    The more, The Better
    趁着情人节写点东西
    分层图最短路问题
    背包问题是否装满问题
    Python面向对象编程扑克牌发牌程序,另含大量Python代码!
  • 原文地址:https://www.cnblogs.com/fxh0707/p/15026966.html
Copyright © 2011-2022 走看看