zoukankan      html  css  js  c++  java
  • 剑指Offer编程题(Java实现)——替换空格

    题目描述

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

    解题思路1

    在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。因为一个空格要替换成三个字符(%20),因此当遍历到一个空格时,需要在尾部填充两个任意字符。

    令 P1 指向字符串原来的末尾位置,P2 指向字符串现在的末尾位置。P1 和 P2 从后向前遍历,当 P1 遍历到一个空格时,就需要令 P2 指向的位置依次填充 02%(注意是逆序的),否则就填充上 P1 指向字符的值。

    从后向前遍是为了在改变 P2 所指向的内容时,不会影响到 P1 遍历原来字符串的内容。

    参考链接:https://www.nowcoder.com/discuss/198840?tdsourcetag=s_pcqq_aiomsg

    参考实现

    public class Solution {
        public String replaceSpace(StringBuffer str) {
            int P1 = str.length() - 1;
            for (int i = 0; i <= P1; i++)
                if (str.charAt(i) == ' ')
                    str.append("  ");
    
            int P2 = str.length() - 1;
            while (P1 >= 0 && P2 > P1) {
                char c = str.charAt(P1--);
                if (c == ' ') {
                    str.setCharAt(P2--, '0');
                    str.setCharAt(P2--, '2');
                    str.setCharAt(P2--, '%');
                } else {
                    str.setCharAt(P2--, c);
                }
            }
            return str.toString();
        }
    }

    结果:

    运行时间:25ms

    占用内存:9404k

    解题思路2:

    使用StringBuffer自带的indexOf和replace方法

    public class Solution {
        public String replaceSpace(StringBuffer str) {
            int index = 0;
            while((index = str.indexOf(" ",index)) != -1){
                str.replace(index, index + 1, "%20");
            }
            
            return str.toString();
        }
    }

    结果:

    运行时间:18ms

    占用内存:9672k

    解题思路3:

    新建一个StringBuffer,遍历原有的字符串,每遇到空格输出“%20”

    public class Solution {
        public String replaceSpace(StringBuffer str) {
            StringBuffer res = new StringBuffer();
            for(int i = 0; i < str.length(); i++){
                char cur = str.charAt(i);
                if(cur != ' '){
                    res.append(cur);
                }else{
                    res.append("%20");
                }
            }
            return res.toString();
        }
    }

    结果:

    运行时间:19ms

    占用内存:9692k

     思路参考:https://www.nowcoder.com/discuss/198840

  • 相关阅读:
    模拟google分页效果
    真理胜于一切 JAVA模拟表单提交
    springboot @vaule注解失效解决办法
    安装cnpm
    公众号微信支付开发
    vue去掉链接中的#
    springboot集成mongoDB简易使用
    Spring boot中使用aop详解
    Promise 的基础用法
    MySQL的if,case语句使用总结
  • 原文地址:https://www.cnblogs.com/MWCloud/p/11235080.html
Copyright © 2011-2022 走看看