替换空格(四)

题目
请实现一个函数,把字符串中的每个空格替换成"%20"。

你可以假定输入字符串的长度最大是1000。
注意输出字符串的长度可能大于1000。

样例
输入:“We are happy.”
输出:“We%20are%20happy.”

class Solution {
    //双指针 时间复杂福O(n),不开辟新的空间,在原来的字符串上进行操作,空间复杂度较低
    public static String replaceSpace3(StringBuffer str){
        int spaceNum = 0;
        //统计空格数量
        int length = str.length();
        for(int i = 0; i < length; i++){
            if(str.charAt(i) == ' '){
                spaceNum++;
            }
        }
        //新字符串长度
        int newLength = spaceNum * 2 + length;
        //字符串扩容
        str.setLength(newLength);
        //原来字符串最后一个
        int indexOld = length - 1;
        //新字符串最后一个
        int indexNew = newLength - 1;
        for (;indexOld >= 0 && spaceNum > 0;indexOld--){
            if (str.charAt(indexOld) == ' '){
                str.setCharAt(indexNew--,'0');
                str.setCharAt(indexNew--,'2');
                str.setCharAt(indexNew--,'%');
                spaceNum--;//空格没了就不在进行
            }else{
                str.setCharAt(indexNew--,str.charAt(indexOld));
            }
        }
        return str.toString();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值