剑指offer 面试题5 替换空格

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

思路:如果从字符串头开始查找,遇到空格替换为“%20”,对于每个空格,需要移动后面o(n)个字符,如果含有o(n)个空格,则后面需移动o(n^2),所以总的时间复杂度为o(n^2)。  所以我们先遍历字符串,找出所有的空格个数n,然后从字符串尾开始,先将最后一个单词向后移动2n位,然后前面的单词依次向后移动,最终的时间复杂度为o(n)。

代码:

class Solution {
public:
	void replaceSpace(char *str,int length)  // 输入字符串和内存长度 
    {
        if(str==NULL||length<=0)     //判断字符串是否为空,且内存长度不能为0
            return;
           int i=0;
           int str_length= 0;
           int replacenumber= 0;
        while(str[i]!='\0')
        {
            str_length++;    //原字符串长度
            if(str[i]==' ')
            {
                replacenumber++;  //空格个数
            }
            i++;
        }
        int oldlength=str_length;     //原字符串长度
        int newlength=str_length+2*replacenumber;    //替换空格后的字符串长度
        if(newlength>length)
            return;
        while(oldlength>=0&&oldlength<newlength)
        {
            if(str[oldlength]==' ')  // 遇到空格替换为"20%"
            {
                str[newlength--]='0';
                str[newlength--]='2';
                str[newlength--]='%';
            }
            else
            {
                str[newlength--]=str[oldlength];   //赋值字符串内容到新字符串
            }
            oldlength--;
        }
	}
};

猜你喜欢

转载自blog.csdn.net/qq_42209189/article/details/80330059