替换空格

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
 
1、很直接的做法:从前往后遍历:遇到空格,就将空格后面的字符往后移动两位。然后将空格替换为%20。(这样子做,每遇到一个空格,其后面的字符都需要移动一次,所以对于一个字符,其移动的次数是其前面空格的个数)
      c++:
      
class Solution {
public:
    void replaceSpace(char *str,int length) {
       // char * p =str;
        int i,j;
       for(i=0;i<length;i++)
       {
           if(str[i]==' ')
           {
               for(j=length-1;j>i;j--)
                   str[j+2]=str[j];
               str[i]='%';
               str[i+1]='2';
               str[i+2]='0';
           }
       }
 
    }
};

 

2、优化的解法:从后往前遍历:首先计算出将空格替换成%20后,整个字符串的长度,然后从后往前遍历,将字符移动到其最终的位置。(相对于其中第一种解法:每一个自符都最多只要移动一次)
      c++:
  
class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(str == NULL||length <0) return;
        int oldlength = 0;
        int newlength = 0;
        int space_num = 0;
        for(int i = 0;str[i]!='\0';++i)
        {
            ++oldlength;
            if(str[i]==' ')
            {
                ++space_num;
            }       
        }
        newlength = oldlength + space_num*2;
        if(newlength>length) return;
        while(oldlength>=0)
        {
            if(str[oldlength]!=' ')
            {
                str[newlength--] = str[oldlength];
            }
            else
            {
                str[newlength--]='0';
                str[newlength--]='2';
                str[newlength--]='%';
            }
            --oldlength;
        }
        return;

    }
};

 

    
posted @ 2018-08-18 10:43  wym95  阅读(136)  评论(0)    收藏  举报