码迷,mamicode.com
首页 > 其他好文 > 详细

《剑指Offer》替换空格(将字符串中的空格替换为%20)

时间:2017-03-12 19:30:32      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:div   string   master   表达   href   keyword   sof   算法与数据结构   structure   

题目:

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

思路:

这种替换问题要考虑是否会覆盖原字符串,若是在源字符串上直接替换。

看到这个问题我觉得很多人都会想到直接从头开始替换,即遇到空格就将其替换为%20,每次都要将空格后的字符后移两个字节。这种解法的时间复杂度为O(n^2)!!!

另外一种较好的解法是从后往前替换,具体做法是从头遍历计算所有空格数,计算出总的长度。 该解法的前提条件是若在源字符串上替换就要求源字符串有足够的空间来容纳新的字符串。时间复杂度为O(n)!!!


public  String replaceSpace(StringBuffer str) {
        //toCharArray()函数会返回一个新的数组,
        //因此就算原数组定义了长度,返回的新数组会取代它
        char[] ch = str.toString().toCharArray();

        int spacenum = 0;  //空格数量
        for(int i =0; i<ch.length; i++){
            if(ch[i]==‘ ‘){
                spacenum++; //如果是空格,加1
            }
        }
        char[] ch1 = new char[2*spacenum + str.length()];
        int len = 2*spacenum+str.length()-1;

        for(int i=ch.length-1; i>=0; i--){
            if(ch[i] != ‘ ‘){
                ch1[len--] = ch[i];
            }else{
                ch1[len--] = ‘0‘;
                ch1[len--] = ‘2‘;
                ch1[len--] = ‘%‘;
            }
        }
        return String.valueOf(ch1);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

还有一种方法虽然很简单(调用 Java API中的 replaceAll 方法·),但是估计面试官不是想这样考你的。

public static String replaceSpace(StringBuffer str) {
        return str.toString().replaceAll("\\s", "%20");
        //\s表示空格(正则表达式)string.toString();
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

所有代码(算法+测试)详见Github/字符串空格替换成%20

《剑指Offer》替换空格(将字符串中的空格替换为%20)

标签:div   string   master   表达   href   keyword   sof   算法与数据结构   structure   

原文地址:http://www.cnblogs.com/ydkf85/p/6538578.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!