替換空格 將一個字串中的空格替換成“ ”

如果一切再重來發表於2017-02-16

題目描述

        請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。
第一次看到的時候,以為看錯了,這也忒簡單了,python 的replace,java的replaceAll,輕鬆完成!
        當然,不可能那麼簡單的。
        演算法菜鳥還是看看別人的思路吧,真的是佩服,哎,演算法之路漫漫!
        思路:先計算原字串中空格的數量,然後計算新字串的長度,這裡的新不是新分配空間,而是在原來的基礎上,加上%20佔的空間。然後從後往前替換,為什麼從後往前呢,因為如果從前往後替換,每次遇到空格,後面的字元都要往後移動,這效率就低了。從後往前就沒這個問題,因為後面的都是空閒空間,資料不會丟失。
       好了,本來用python寫的,但是,除錯的時候有個問題,因為新字串的長度要更長,不知道怎麼像java setlength那樣子改變字串的長度,就只能用java了。這是別人寫好的,按照思路自己寫了一下。
public class Solution {
    public 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();
    }
}


相關文章