码迷,mamicode.com
首页 > 其他好文 > 详细

替换空格

时间:2019-05-27 10:30:10      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:+=   指针   空间   char   大于   stringbu   tchar   函数   分析   

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

你可以假定输入字符串的长度最大是1000。
注意输出字符串的长度可能大于1000。

样例

输入:"We are happy."

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



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

首先遍历一遍原数组,求出最终答案的长度length;
将原数组resize成length大小;
使用两个指针,指针i指向原字符串的末尾,指针j指向length的位置;
两个指针分别从后往前遍历,如果str[i] == ‘ ‘,则指针j的位置上依次填充‘0‘, ‘2‘, ‘%‘,这样倒着看就是"%20";如果str[i] != ‘ ‘,则指针j的位置上填充该字符即可。
由于i之前的字符串,在变换之后,长度一定不小于原字符串,所以遍历过程中一定有i <= j,这样可以保证str[j]不会覆盖还未遍历过的str[i],从而答案是正确的。

时间复杂度分析
原字符串只会被遍历常数次,所以总时间复杂度是 O(n)。

 public String replaceSpaces(StringBuffer str) {
        int len = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == ‘ ‘)
                len += 3;
            else
                len++;
        }
        int i = str.length() - 1;
        int j = len - 1;
        str.setLength(len);
        while (i >= 0) {
            if (str.charAt(i) == ‘ ‘) {
                str.setCharAt(j--, ‘0‘);
                str.setCharAt(j--, ‘2‘);
                str.setCharAt(j--, ‘%‘);

            } else str.setCharAt(j--, str.charAt(i--));
            ;
        }
        return str.toString();
    }

c++代码:

string replaceSpaces(string &str) {

        int len = 0;
        for (auto c : str)
            if (c == ‘ ‘)
                len += 3;
            else
                len ++ ;

        int i = str.size() - 1, j = len - 1;

        str.resize(len);

        while (i >= 0)
        {
            if (str[i] == ‘ ‘)
            {
                str[j -- ] = ‘0‘;
                str[j -- ] = ‘2‘;
                str[j -- ] = ‘%‘;
            }
            else str[j -- ] = str[i];
            i -- ;
        }
        return str;
    }

  

替换空格

标签:+=   指针   空间   char   大于   stringbu   tchar   函数   分析   

原文地址:https://www.cnblogs.com/clarencezzh/p/10929267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!