劍指Offer_#5_替換空格
阿新 • • 發佈:2020-07-31
劍指Offer_#5_替換空格
劍指offerContents
題目
請實現一個函式,把字串 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)