1. 程式人生 > 實用技巧 >劍指Offer_#5_替換空格

劍指Offer_#5_替換空格

劍指Offer_#5_替換空格

劍指offer

Contents

題目

請實現一個函式,把字串 s 中的每個空格替換成"%20"。
示例 1:

輸入:s = "We are happy."
輸出:"We%20are%20happy."

限制:
0 <= s 的長度 <= 10000

思路分析

思路

遍歷輸入字串s,遇到空格就在結果當中新增"%20",遇到其他的字元就新增字元本身。

方法1:char陣列

關鍵問題在於,不知道字串s

當中有幾個空格,那麼在定義字元陣列的時候無法給出陣列的大小。
解決方法:

  • 假設最極端情況,也就是輸入字串全都是空格,那麼用於存放結果的字元陣列長度就是輸入字串長度的3倍。
  • 在遍歷的過程中增加一個計數器變數,記錄字元陣列最後一個有效字元的索引,返回之前將有效的部分轉換為字串。

方法2:StringBuilder

使用StringBuilder來存放結果,就避免了上面的問題,不需要給出陣列大小。

解答

解答1:char陣列

class Solution {
    public String replaceSpace(String s) {
        char
[] charArray = new char[3*s.length()]; int size = 0; for(int i = 0;i < s.length();i++){ char c = s.charAt(i); if(c == ' '){ charArray[size++] = '%'; charArray[size++] = '2'; charArray[size++] = '0'; }else
{ charArray[size++] = c; } } String newStr = new String(charArray,0,size); return newStr; } }

複雜度分析

時間複雜度:O(n)
空間複雜度:O(n)

解答2:StringBuilder

class Solution {
    public String replaceSpace(String s) {
        StringBuilder res = new StringBuilder();
        int i = 0;
        while(i <= s.length() - 1){
            if(s.charAt(i) == ' ') res.append("%20");
            else res.append(s.charAt(i));
            i++;
        }
        return res.toString();
    }
}

複雜度分析

時間複雜度:O(n)
空間複雜度:O(n)