剑指offer02替换空格

  1. 问题描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy

 2.思路解析

我们可以创建一个新的字符串,也可以在原字符串基础上修改,但是要保证字符串后边有足够多的空余内存。

如果从前往后扫描字符串,遇到空格,就要将后边的字符依次向后移动两个字节,时间复杂度为O(n2)。

如果从前往后扫描字符串,记录下空格的个数,那么就知道了新字符串的长度,然后从新字符串的末尾向前开始复制和替换。设置两个指针,分别指向源位置和目的位置,当二者重合时,意味着复制完成。

3.C++代码

class Solution {
public:
	void replaceSpace(char *str,int length) {
        if (str==NULL || length<0)
            return;
        int strlength = 0, spacenum = 0;
        for(int i=0; str[i]!='\0';i++){
            strlength++;
            if(str[i]==' ')
                spacenum++;
        }
        if (spacenum == 0)
            return;
        int newlength = strlength+2*spacenum;
        if (newlength > length-1)
            return;
        while(strlength>=0 && strlength<newlength){
            if (str[strlength]==' '){
                strlength--;
                str[newlength--]='0';
                str[newlength--]='2';
                str[newlength--]='%';
            }
            else{
                str[newlength--] = str[strlength--];
            }
        }
        return;
        
	}
};

4.总结

合并两个字符串或数组时,如果从前往后复制需要移动的次数很多时,可以考虑从后往前复制。

猜你喜欢

转载自blog.csdn.net/weixin_40888121/article/details/80587836
今日推荐