每天一道劍指offer-替換空格
- 2019 年 10 月 4 日
- 筆記
題目
每天一道劍指offer-替換空格 鏈接: http://t.cn/E2RV7Wv
題目詳述
請實現一個函數,將一個字元串中的每個空格替換成「%20」。例如,當字元串為We Are Happy.則經過替換之後的字元串為We%20Are%20Happy。
題目詳解
思路
- 劍指offer的思路.就是一個空格變成了%20,也就是說每有一個空格,長度要增加2,所以首先先計算有多少個空格,這樣長度就能增加多少,得到增加後的長度Length。
- 然後new一個Length長度的字元數組,從尾到頭開始複製原來的數組,如果複製過程中,如果字元不是空格,直接複製,如果字元是空格,那麼需要把這個空格變成%20(這個複製過程就是把新建的數組比如現在到了 K這個位置,然後就是K,K-1,K-2這三個位置依次變成0,2,%這三個字元,因為是從後往前複製的所以是倒序),重複這個過程就行。 如果相等,返回true;
程式碼
import java.util.*; public class Solution { public String replaceSpace(StringBuffer str) { String str1 = str.toString(); if(str1.equals("")) return str1; char [] strArray = str1.toCharArray(); int i =0; int lengthSpace = 0; while(i < strArray.length) { if(strArray[i] == ' ') lengthSpace++; i++; } int newStrLength = strArray.length + lengthSpace*2; char [] newStr = new char[newStrLength]; int j = newStrLength-1; i = strArray.length - 1; while(i >= 0) { if(strArray[i] != ' ') { newStr[j--] = strArray[i--]; }else{ newStr[j--] = '0'; newStr[j--] = '2'; newStr[j--] = '%'; i--; } } return new String(newStr); } }
程式碼講解
- 7行把字元串轉換成字元數組
- 8-15行 計算有多少個空格,16行就是計算新的字元數組的長度(每有一個空格,長度增加2)
- 20-31行就是複製過程,22-24行就是如果原來的舊的字元數組不是空格這個字元,那麼新數組與舊數組的值一樣;
- 25-29行就是如果舊的字元數組是空格,那麼新的字元數組這時候就得把j,j-1,j-2這三個位置變成0,2,%,然後重複20-31行這個過程就行。