請實現一個函式,把字串 s 中的每個空格替換成”%20”。
示例 1:
輸入:s = "We are happy."
輸出:"We%20are%20happy."
限制:
0 <= s 的長度 <= 10000
方法一:字元陣列
由於每次替換從 1 個字元變成 3 個字元,使得字元陣列可方便的進行替換,建立字元陣列的長度為 s
的長度的 3 倍,這樣可以保證字元資料可以容納所以替換後的字元。
- 獲得
s
的長度length
- 建立字元陣列
array
,其長度為length * 3
- 初始化
size=0
,size
表示替換後字串的長度 - 從左到右遍歷字串
s
個人理解
- 獲取字串的單個元素使用
s.charAt()
方法。 char
陣列替換為string
陣列有如下方法public String(char value[], int offset, int count)
。- 下標移動:遇到空格的時候,要移動是三個下標。
- 在 Java 等語言中,字串都被設計成不可變的型別,即無法直接修改字串的某一位字元,需要新建一個字串實現。
方法二:append
初始化一個 StringBuilder,記為
res
;遍歷字串
s
中的每個字元c
;- 當
c
為空格時:向res
後新增字串"%20"
; - 當
c
不為空格時:向res
後新增字元c
;
- 當
將列表
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();
}
}
個人理解
- Character: Character 類用於對單個字元進行操作。Character 類在物件中包裝一個基本型別
char
的值。 - StringBuilder: StringBuilder 是一個可變物件,可以預分配緩衝區,這樣,往
StringBuilder
中新增字元時,不會建立新的臨時物件。 - 型別轉換: 記得最後要將
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 協議》,轉載必須註明作者和本文連結