剑指offer 替换空格java实现

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."

限制:0 <= s 的长度 <= 10000

leetcode:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/

解题思路

将String转为BufferString,一个空格要替换成三个字符(%20),所以当遍历到一个空格时,需要在尾部填充两个任意字符。令 p1 指向原符串末尾位置,p2 指向字符串现在的末尾位置。p1 和 p2 从后向前遍历,当 p1 遍历到一个空格时,将 p2 指向的位置依次填充 02%(注意是逆序的),否则就填充上 p1 指向字符的值。从后向前遍是为了在改变 p2 所指向的内容时,不会影响到 p1 遍历原来字符串的内容。当 P2 遇到 P1 时(P2 <= P1),或者遍历结束(P1 < 0),退出,最后转为String类型返回。

代码

class Solution {
     public String replaceSpace(String s) {
        if(s == null || s.length() == 0){
            return s;
        }
        StringBuffer buffer = new StringBuffer(s);
        //统计字符串中' '字符个数,每替换一个空格,字符串长度加2
        int i = 0;
        // 字符串末尾自动加上'\0',统计字符串长度时要减一
        int p1 = s.length() - 1;
        //while循环执行时,尽量不要用charAt()作为判断条件,消耗时间长(直接整超时了)
        // while(buffer.charAt(i) != '\0'){
        while(i <= p1){ 
            if(buffer.charAt(i) == ' '){
                buffer.append("  ");
            }
            i++;
        }
        //p1指向原字符串末尾,p2指向扩增后的字符串末尾,
        // 字符串末尾自动加上'\0'
        int p2 = buffer.length() - 1;
        while(p1 >= 0 && p2 > p1){
            char c = buffer.charAt(p1);
            if(buffer.charAt(p1--) == ' '){
                buffer.setCharAt(p2--, '0');
                buffer.setCharAt(p2--, '2');
                buffer.setCharAt(p2--, '%');
            }else{
                buffer.setCharAt(p2--, c);
            }
        }
        return buffer.toString();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值