[每日一題] 第十題:替換空格

DRose發表於2020-07-31

請實現一個函式,把字串 s 中的每個空格替換成”%20”。

示例 1:

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

限制:

  • 0 <= s 的長度 <= 10000

方法一:字元陣列

由於每次替換從 1 個字元變成 3 個字元,使得字元陣列可方便的進行替換,建立字元陣列的長度為 s 的長度的 3 倍,這樣可以保證字元資料可以容納所以替換後的字元。

  • 獲得 s 的長度 length
  • 建立字元陣列 array,其長度為 length * 3
  • 初始化 size=0size 表示替換後字串的長度
  • 從左到右遍歷字串 s

個人理解

  1. 獲取字串的單個元素使用 s.charAt() 方法。
  2. char 陣列替換為 string 陣列有如下方法 public String(char value[], int offset, int count)
  3. 下標移動:遇到空格的時候,要移動是三個下標。
  4. 在 Java 等語言中,字串都被設計成不可變的型別,即無法直接修改字串的某一位字元,需要新建一個字串實現。

方法二:append

  1. 初始化一個 StringBuilder,記為 res

  2. 遍歷字串 s 中的每個字元 c

    1. c 為空格時:向 res 後新增字串 "%20";
    2. c 不為空格時:向 res 後新增字元 c
  3. 將列表 res 轉化為 String 型別並返回。

程式碼

class Solution {
    public String replaceSpace(String s) {
        StringBuilder res = new StringBuilder();
        for(Character c : s.toCharArray())
        {
            if(c == ' ') res.append("%20");
            else res.append(c);
        }
        return res.toString();
    }
}

個人理解

  1. Character: Character 類用於對單個字元進行操作。Character 類在物件中包裝一個基本型別 char 的值。
  2. StringBuilder: StringBuilder 是一個可變物件,可以預分配緩衝區,這樣,往 StringBuilder中新增字元時,不會建立新的臨時物件。
  3. 型別轉換: 記得最後要將 StringBuilder 型別結果轉化為 String 型別。

複雜度分析

  • 時間複雜度O(N): 遍歷使用 O(N),每輪新增(修改)字元操作使用 O(1)。
  • 空間複雜度O(N): Java 新建的 StringBuilder 使用了線性大小的額外空間。

題解來源

作者:jyd
連結:leetcode-cn.com/problems/ti-huan-k...
來源:力扣(LeetCode)

來源:力扣(LeetCode)
連結:leetcode-cn.com/problems/ti-huan-k...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章