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

    题目

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

    解题思路

    用"%20"三个字符来代替“ ”一个字符,字符串会变长,如果在原来的字符串上直接操作会导致后面的字符被覆盖,所以我们需要扩展空间;

    如果创建新的字符串并在新的字符串上替换,则我们自己可以分配足够多的空间。这里我们采用的是在原来的字符串上替换,要将空格后面的字符串后移。

    常规思路是从前向后遍历,碰到空格就将其后面的字符串后移两位,这样做的时间复杂度为O(n2),但是仔细一看就可以发现后面很多字符是被重复移动的。

    为了解决这个问题,我们采用从后向前遍历的方式,

    首先遍历原字符串找出空格的数量m,则替换过后字符串的数量newLen为原字符串长度+2*m,将字符串空间扩展到newLen之后,从后向前遍历

    原字符串,碰到非字符串则直接移动,遇到空字符串则替换。这种方式的时间复杂度为O(n)

    代码

     1     public String replaceSpace(StringBuffer str) {
     2         if(str == null || "".equals(str)){
     3             return "";
     4         }
     5         int originLen = str.length();
     6         int blankNum = 0;
     7         for(int i=0; i<originLen;i++){
     8             if(str.charAt(i) == ' '){
     9                 blankNum++;
    10             }
    11         }
    12         int currentLen = originLen+2*blankNum - 1;
    13         str.setLength(currentLen+1);
    14         for(int i=originLen-1;i>=0;i--){
    15             char currentChar = str.charAt(i);
    16             if(currentChar!=' '){
    17                 str.setCharAt(currentLen, currentChar);
    18                 currentLen--;
    19             }else{
    20                 str.setCharAt(currentLen--,'0');
    21                 str.setCharAt(currentLen--,'2');
    22                 str.setCharAt(currentLen--,'%');
    23 
    24             }
    25         }
    26         return str.toString();
    27     }

    扩展

    合并两个排好序的数组A1,A2到A1中(A1后面有足够的空间可以容纳A2),使合并后的数组仍然有序

    和上面同理,也是从尾到头遍历A1,A2找到A1,A2中尾部较大的数放到A1新的尾部,然后将较大数的数组的下标前移

  • 相关阅读:
    form在两个div之间会有间距 得加上style="margin:0px"
    JavaScript trim函数大赏 (转)
    js prototype
    aptana对齐快捷键ctrl+shift+f
    深入浅出JSON
    ie和火狐的一些区分
    javascript”面向对象编程” 2聊聊对象的事
    _#【media type / media query】
    【ajax】接口数据赋给全局变量
    _#【HTML 优化】使用相对 URL
  • 原文地址:https://www.cnblogs.com/huanglf714/p/11068162.html
Copyright © 2011-2022 走看看