2. 替换空格

 题目:

思路:

1. 申请一个较大的缓存依次缓存源字符串中非空格元素,遇到空格就替换 然后将缓存中的字符串考回原数组,进行输出

2. 将空格替换成%20时,每个空格变成了3个字符,整个字符串的长度就会改变。len = len + 2*空格。

 

方法:

1. 从前往后替换(O(n^2),每遇空格,整个串都要移动一次)

2. 从后往前替换 (O(n), 这种方法更优一点)。推荐

3. 利用java自带的replace覆盖原字符串(也复杂) 

 

方法2:

class Solution {
public:
void replaceSpace(char *str,int length) {
        //遍历一边字符串找出空格的数量
        if(str==NULL||length<0)
            return ;
        int i=0;
        int oldnumber=0;//记录以前的长度
        int replacenumber=0;//记录空格的数量
        while(str[i]!='\0')
            {
               oldnumber++;
               if(str[i]==' ')
                   {
                     replacenumber++;
                   }
                  i++; 
            }
        int newlength=oldnumber+replacenumber*2;//插入后的长度
        if(newlength>length)//如果计算后的长度大于总长度就无法插入
            return ;
        int pOldlength=oldnumber; //注意不要减一因为隐藏个‘\0’也要算里
        int pNewlength=newlength;
        while(pOldlength>=0&&pNewlength>pOldlength)//放字符
            {
              if(str[pOldlength]==' ') //碰到空格就替换
                  {
                     str[pNewlength--]='0';
                     str[pNewlength--]='2';
                     str[pNewlength--]='%';
                     
                  }
               else //不是空格就把pOldlength指向的字符装入pNewlength指向的位置
               {
                    str[pNewlength--]=str[pOldlength];
                   
               }
             pOldlength--; //不管是if还是elsr都要把pOldlength前移
             
           }
        

}
};

 

方法3:

public class Solution {
    public String replaceSpace(StringBuffer str) {
        String s = new String(str); //toString方法操作的是对象,所以需要使用包装类。
        return s.toString().replaceAll(" ", "%20");
    }
}

 

posted @ 2018-11-08 16:30  抒抒说  阅读(290)  评论(0编辑  收藏  举报