1. 程式人生 > >劍指offer--字串替換空格

劍指offer--字串替換空格

將一個字串中的空格替換成 "%20"。

Input:
"We Are Happy"

Output:
"We%20Are%20Happy"

這道題第一眼看好簡單啊,直接遍歷然後替換空格就好了啊, 唯一要注意是引數StringBuffer形式

public class Solution {
    public String replaceSpace(StringBuffer str) {
        String res="";
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)==' ')
                res += "%20";
            else
                res += str.charAt(i);
        }
        return res;
    }
}

看了牛客網答案有的人從後往前做,不明白為什麼要複雜化,看了說明,是考慮到在 原字串上做替換。這樣的話從後往前只需要移動一次比較簡單。

從前往後替換,後面的字元要不斷往後移動,要多次移動,所以效率低下

 從後往前,先計算需要多少空間,然後從後往前移動,則每個字元只為移動一次,這樣效率更高一點。

我的答案:要注意從後往前下標從length-1開始

public class Solution {
    public String replaceSpace(StringBuffer str) {
        int space_num = 0;
        int old_length = str.length();
        for(int i=0;i<old_length;i++){
            if(str.charAt(i)==' ')
                space_num++;
        }
        int new_length = old_length+2*space_num;
        int j= new_length-1;
        str.setLength(new_length);
        for(int i=old_length-1;i>=0;i--){//這裡別人還加了一個i<=j的條件,但是我覺得不必要
            if(str.charAt(i)==' '){
                str.setCharAt(j--,'0');
                str.setCharAt(j--,'2');
                str.setCharAt(j--,'%');
            }
            else
                str.setCharAt(j--,str.charAt(i));
        }
        return str.toString();
    }
}