剑指offer5 替换空格

首先这个肯定不能用String类自带方法做。String.replace。

先行为艺术一下吧:

public class Solution {
    public String replaceSpace(StringBuffer str) {
        return str.toString().replace(" ","%20");
    }
}

这个题java给的是StringBuffer,那先用StringBuffer的API做吧,熟悉一下。(StringBuffer可以当成StringBuilder用,只是多了线程安全)。

public class Solution {
    public String replaceSpace(StringBuffer str) {
        StringBuffer sb = new StringBuffer();
        for(char c:str.toString().toCharArray()){
            if(c==' ') sb.append("%20");
            else sb.append(c);
        }
        return sb.toString();
    }
}

倒着插入试试看,

public class Solution {
    public String replaceSpace(StringBuffer str) {
        /*int space_num = 0;
        for(char c:str.toString().toCharArray()){
            if(c==' ') space_num++;
        }*/
        StringBuffer sb = new StringBuffer();
        char[] str_arr = str.toString().toCharArray();
        for(int i=str_arr.length-1;i>=0;i--){
            if(str_arr[i]==' ') sb.insert(0,"%20");
            else sb.insert(0,str_arr[i]);
        }
        return sb.toString();
    }
}

看来insert效率还是不如append高的。查了下,因为java底层的StringBuilder和StringBuffer其实就是一个可以扩容的char数组。

下面用char数组做一下。

好麻烦,毕竟不是char数组输入,所以就先这样吧,这题不用太当真。

记住如果用数组,可以倒着插入。

 

# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        # return s.replace(" ","%20") 26ms 5700k
        
        #arr = list(s) 25ms 5752k
        #for i in range(len(arr)):
        #    if arr[i]==" ":
        #        arr[i]="%20"
        #return "".join(arr)
        
        # 23ms 5676k
        ans = ""
        for c in s:
            if c==" ":
                ans+="%20"
            else:
                ans+=c
        return ans

看来直接操作还挺快

posted @ 2019-02-13 12:59  大胖子球花  阅读(84)  评论(0)    收藏  举报