剑指Offer第2题

Q:请实现一个函数,将一个字符串中的空格替换成“20%”。例如,当字符串为 WE ARE HAPPY。

经过替换后字符串为WE20%ARE20%HAPPY。


思路 :
//1:从前往后插入,这样移动·的次数多不建议 
//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:

 一行JAVA代码搞定:   return str.toString().replaceAll(&quot; &quot; , &quot;%20&quot;); 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值