zoukankan      html  css  js  c++  java
  • 剑指:替换空格

    题目描述

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

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

    样例

    输入:"We are happy."
    
    输出:"We%20are%20happy."
    

    解法

    解法一

    利用正则匹配替换。

    String str = "We are happy.";
            
    str = str == null?null : str.toString().replace(" ", "%20");
    System.out.println(str);

    解法二

    先遍历原字符串,计算空格数,可以得知替换后的字符串长度等于原来的长度加上2乘以空格数目。

    用指针 i 指向原字符串末尾,j 指向现字符串末尾,ij 从后往前遍历,当 i 遇到空格,j 位置依次要赋值为 '0','2','%',此时i移动1位,j移动3位;若不是空格,直接赋值为 i 指向的字符。

    思路扩展:

    在合并两个数组(包括字符串)时,如果从前往后复制每个数字(或字符)需要重复移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样就能减少移动的次数,从而提高效率。

    public class Solution {
        public static String replaceSpace(StringBuffer str) {
            int spacenum = 0;// spacenum为计算空格数
            for (int i = 0; i < str.length(); i++) {
                if (str.charAt(i) == ' ')
                    spacenum++;
            }
            int indexold = str.length() - 1; // indexold为为替换前的str下标
            int newlength = str.length() + spacenum * 2;// 计算空格转换成%20之后的str长度
            int indexnew = newlength - 1;// indexold为为把空格替换为%20后的str下标
            str.setLength(newlength);// 使str的长度扩大到转换成%20之后的长度,防止下标越界
            
            for (; indexold >= 0 && indexold < newlength; --indexold) {
                if (str.charAt(indexold) == ' ') { //
                    str.setCharAt(indexnew--, '0');
                    str.setCharAt(indexnew--, '2');
                    str.setCharAt(indexnew--, '%');
                } else {
                    str.setCharAt(indexnew--, str.charAt(indexold));
                }
            }
            return str.toString();
        }
    
        public static void main(String[] args) {
            String str = "We are happy.";
            StringBuffer s = new StringBuffer(str);
            String newstr = replaceSpace(s);
            System.out.println(newstr);
        }
    }

    时间复杂度O(n)

  • 相关阅读:
    poj2739
    poj1469
    poj2010
    poj1179
    poj1778
    使用数组实现ArrayList的效果
    zgb老师关于java集合的总结
    jah老师中关于集合的总结
    继承一个类或者是实现一个接口注意点
    5、Iterator迭代器的使用
  • 原文地址:https://www.cnblogs.com/lisen10/p/11041059.html
Copyright © 2011-2022 走看看