劍指offer(二)之替換空格
阿新 • • 發佈:2018-12-22
題目描述
請實現一個函式,將一個字串中的每個空格替換成“%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(); }