剑指offer[二]:替换空格(java和c++版本)

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

  1. java版本
public class Solution {
/**
     * 暴力法的话就没意思
     */
     public static String replaceSpace(StringBuffer str) {
        /**建立两个指针,从后往前复制,首先计算好复制后的总长度
         * 
         */
         int count=0;
         for(int i=0;i<str.length();i++){
             if(str.charAt(i)==' ')
                 count++;
         }

         int p1=str.length()-1,p2=str.length()+count*2-1;
         char[]s1=new char[p2+1]; 
         System.arraycopy(str.toString().toCharArray(), 0, s1, 0, str.length());
         while(p1>=0&&p2>p1){
             if(s1[p1]==' '){//遇到空格
                 s1[p2--]='0';
                 s1[p2--]='2';
                 s1[p2--]='%';
             }
             else{//遇到单词,则复制
                 s1[p2--]=s1[p1];
             }
             p1--;
             //遇到空格了         
         }
         return new String(s1);
        }
}

2 . c++版本
在原本的字符指针上进行复制操作

class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(str==nullptr)
            return;
        int countEmpty=0;
        for(int i=0;i<length;++i){
            if(str[i]==' ')
                countEmpty++;
        }
        if(countEmpty==0)
            return;
        int resultIndex=length+2*countEmpty-1;//最后的索引
         while((length-1)>=0&&resultIndex>=length){
             if(str[length-1]!=' '){//遇到单词,则复制
                 str[resultIndex--]=str[length-1];
             }else{//遇到空格
                 str[resultIndex--]='0';
                 str[resultIndex--]='2';
                 str[resultIndex--]='%';
             }
             length--;   
         }  
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值