替换空格

替换空格

题目描述

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

解题思路

其实这题比较简单,只需要对应好位置,就可以得出答案,时间上最小应该就是o(n)。但是情况上有两种可能,需要进行说明一下。

  • 能在原来的字符串数组上进行改动。能在原来数组上进行改动,那么只要找好最终数组的长度,然后从后向前找对应的位置就行。(为什么从后向前?因为从前向后,前面的遍历的就改变后面遍历得情况,而从后向前则不会)

    如:原来字符串为”We Are Happy“,长度为12(在java下没有考虑末尾的‘\0‘,如果是c等可能需要考虑),有两个空格,则最终的长度为14。然后我设p1=11,p2=13,然后如下:

    • array[p1]!=’ ',array[p2] = array[p1] ,接着(p2–,p1–)
    • array[p1]==’ ‘,array[p2]=‘0’,array[p2-1]=‘2’,array[p2-2]=’%’,接着(p2-=3,p–)
  • 不能在原来得数组上进行改动。不能在原来数组上进行改动,那么直接new一个最终长度得数组,然后从前向后对原数组遍历,确定位置就行。

    如:原来字符串为”We Are Happy“,长度为12(在java下没有考虑末尾的‘\0‘,如果是c等可能需要考虑),有两个空格,则最终的长度为14。我重新创建一个长度为14字符数组,设p1=0,p2=0,然后如下:

    • array[p1]!=’ ',Newarray[p2] = array[p1] ,接着(p2++,p1++)
    • array[p1]==’ ‘,Newarray[p2]=’%’,array[p2+1]=‘2’,array[p2+2]=’%’,接着(p2+=3,p++)

代码实现

public class Solution {
    public String replaceSpace(StringBuffer str) {
        if(str==null)
            return null;
        int fianl_length = str.length();
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)==' '){
                fianl_length+=2;
            }
        }
        char [] res = new char[fianl_length];
        int p1 =0;
        for(int i=0;i<str.length();i++){
             if(str.charAt(i)==' '){
                res[p1]='%';
                res[p1+1]='2';
                res[p1+2]='0';
                 p1+=3;
             }else{
                 res[p1] = str.charAt(i);
                 ++p1;
             }
        }
        return String.valueOf(res);
    }
}

我采用的是第二种方法,因为给的是StringBuffer,也不像字符串数组,所以采用第二种了。

总结

这是《剑指offer》上的一题,这题比较简单,无需多说。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值