1. 程式人生 > >劍指offer(二)之替換空格

劍指offer(二)之替換空格

題目描述

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

思路

不用開闢新空間的做法。
先計算出替換後的字串總長度,維護新字串的索引 j, 舊字串的索引 i 。(新舊並不是說生成了新字串,之前便於區分)

索引 i 從前往後讀取字串資訊
索引 j 從後向前生成字串,當索引 i 對應的 str[ i ] 是空格時, 就在索引 j 依次新增 0 2 % ( 這裡具體看程式碼吧) ; 否則就新增上str[ i ];

從後向前進行構造字串,這是為什麼呢?因此構造後的字串總比構造前要長,如果從前向後構造,那麼會替換掉構造前的字串,造成資料丟失。

程式碼


    public String replaceSpace(StringBuffer str) {
        int cnt = 0;
        for (int i = 0, j = str.length(); i < j; i++) {
            if(str.charAt(i) == ' ')
                 cnt++;
        }
        int j = str.length() - cnt + cnt * 3 - 1;
        int i = str.length() - 1;
        str.setLength(j+1);
        while (i >= 0) {
            if (str.charAt(i) == ' ') {
                str.setCharAt(j--,'0');
                str.setCharAt(j--,'2');
                str.setCharAt(j--,'%');
            }else str.setCharAt(j--,str.charAt(i));
            i--;
        }
        return str.toString();
    }