1. 程式人生 > >java 劍指offer 第二題:請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。

java 劍指offer 第二題:請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。

**
public class Solution {
public String replaceSpace(StringBuffer str) {

首先程式給出的引數是StringBuffer類,那麼我首先考慮的是就呼叫StringBuffer類的相關方法完成操作。
  • 方法一
    配合StringBuffer 的indexOf方法和replace方法。
    但是StringBuffer沒有方法來判斷str裡面是否有空格,所以先轉換為字串判斷是否有空格。
public class Solution {
    public String replaceSpace(StringBuffer str
) { String result = str.toString(); if(result.contains(" ")){ while(str.indexOf(" ") != str.lastIndexOf(" ")){ int index = str.indexOf(" "); str.replace(index,index+1,"%20"); } int index = str.indexOf(" "); str.replace(index
,index+1,"%20"); result = str.toString(); return result; }else{ return result; } } }

結果為17ms,13012k.

  • 方法二
    後來發現StringBuffer的indexOf方法找不到時返回值為-1,那麼直接使用-1
    來做判斷程式碼簡單很多。
public class Solution {
    public String replaceSpace(StringBuffer str
) { int index = str.indexOf(" "); while(index != -1){ str.replace(index,index+1,"%20"); index = str.indexOf(" ",index); } String result = str.toString(); return result; } }

測試通過為18ms,8928k。(不知道時間為什麼會變多)

  • 方法三
    事後檢視網上的方法,不呼叫replace方法實現。
public class Solution {
    public String replaceSpace(StringBuffer str) {
        int n = str.length();//字串的長度 
        int ii = 0;//空格的個數ii 
        for(int i = 0;i < n;i++){ 
            //檢測空格 
            if(str.charAt(i)==' '){ 
                ii++; 
            } 
        } 

        int nn = 2 * ii + n;//根據空格的個數,得到新陣列的長度 
        int index = nn -1; 
        char[] ct = new char[nn];//新建陣列 
        while(n > 0){ 
            if(str.charAt(n - 1) != ' '){ 
                //如果不是空格 
                ct[index--] = str.charAt(n-1); 
            } 
            else{ 
                //如果是空格 
                ct[index--] = '0'; 
                ct[index--] = '2'; 
                ct[index--] = '%'; 
            } 
            //取下一個字元 
            n--; 
        } 
        return String.valueOf(ct);//將字元陣列轉為String型別後返回 

    }
}

測試結果18ms,8744k.