【劍指offer】【2】字串的空格
時間限制:1秒 空間限制:32768K 熱度指數:594664
題目描述
請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。
知識補充:
1、StringBuffer
是可變類,在修改字串內容時,不會建立新的物件,因此它比String類更適合修改字串。
- StringBuffer如何轉換成陣列
StringBuffer類沒有提供同String一樣的toCharArray方法,因此需要使用toString方法轉換成String型別然後呼叫toCharArray方法轉換成陣列。
- StringBuffer的輸出列印
StringBuffer物件有一個toString()方法,就是將你的快取的字符串列印出來,是String型別的
2、單引號和雙引號的區別
- 單引號引的資料,是char型別的。雙引號引的資料,是String型別的;
- char定義時用單引號,只能有一個字母,數字:char c='c'。而String用雙引號,可以是一個,也可能是多個字母,漢字等。就是所謂的字串:String s="adsaf";
- char只是一個基本型別,而String 可以是一個類,可以直接引用。比如char c='c',不能直接對c呼叫方法。String s="abc";。這時可以呼叫s.charAt(0);等方法,因為String是類,這是就是物件的呼叫了。
- toString():轉換為字串
- toCharArray():將字串轉換為字元陣列
- charAt(index):按照index索引值
- setCharAt(index,value):按照index設定
- setLength(newLength):設定長度
本人程式碼:
public class Solution {
public String replaceSpace(StringBuffer str) {
char[] ch = str.toString().toCharArray();
StringBuffer strr = new StringBuffer();
for(int i = 0; i < ch.length;i++){
if(ch[i] == ' '){
strr.append("%20");
}else{
strr.append(ch[i]);
}
}
return strr.toString();
}
}
改進:
考慮空間複雜度,不new物件。
如果不把字串轉換為陣列,直接處理字串也行。使用str.charAt也可以對字串進行遍歷。
如果從前向後遍歷,遇到空格就替換成“%20”,那麼其後的字串的內容就會被替換掉,因為沒有開闢新的字串用的是用一個str。因此如果可以先將字串的長度進行擴充,那麼擴充的部分目前還是空可以存放東西,若從後向前更新字串就不會出現字串被覆蓋消失的問題。
思路二:先計算需要多少空間,然後從後向前遍歷,不斷填充,遇到空格替換成“%20”即可。
public class Solution {
public String replaceSpace(StringBuffer str) {
//計算空格的數量
int num = 0;
for(int i = 0; i < str.length();i++){
if(str.charAt(i) == ' '){
num++;
}
}
//計算新字串的長度
int newLength = str.length() + 2*num;
//設定兩個指標,一個是從後向前遍歷字串查詢空格,另一個是從後向前更新填充後的字串
int indexOld = str.length() -1;
int indexNew = newLength - 1;
//擴充字串長度
str.setLength(newLength);
//從後向前遍歷,並進行更新
for(; indexOld >=0 && indexNew >= 0; indexOld--){
if(str.charAt(indexOld) == ' '){
str.setCharAt(indexNew--,'0');
str.setCharAt(indexNew--,'2');
str.setCharAt(indexNew--,'%');
}else{
str.setCharAt(indexNew--, str.charAt(indexOld));
}
}
return str.toString();
}
}
相關文章
- 【劍指offer】2.替換空格
- 劍指offer-替換空格02
- LeetCode 劍指 Offer 05. 替換空格LeetCode
- 劍指 Offer 38. 字串的排列字串
- 劍指Offer 表示數值的字串字串
- 劍指Offer系列之「表示數值的字串」字串
- 劍指offer-第2章
- 劍指offer—58_2.左旋轉字串—分析及程式碼(Java)字串Java
- 劍指OFFER
- 劍指offer(Java版)--將字串轉換為整數Java字串
- 劍指offer——把字串轉換成整數C++字串C++
- 劍指 Offer 48. 最長不含重複字元的子字串字元字串
- 劍指offer導航
- Leetcode劍指offer(八)LeetCode
- 劍指 offer21
- 劍指offer16
- 劍指 offer20
- leetcode 劍指 Offer 48. 最長不含重複字元的子字串LeetCode字元字串
- 劍指offer-JavaScript版JavaScript
- 【劍指Offer】矩形覆蓋
- 劍指Offer題解合集
- 劍指offer——跳臺階
- 六、劍指 Offer(25~29)
- 力扣 - 劍指 Offer 67. 把字串轉換成整數力扣字串
- 《Leetcode of December》劍指 Offer 67. 把字串轉換成整數LeetCode字串
- 劍指offer第41~50題
- 劍指 offer(1) -- 陣列篇陣列
- 劍指offer刷題記錄
- 劍指offer——包含min函式的棧函式
- offer通過--4替換空格-2
- 《劍指 Offer》棧實現佇列佇列
- 劍指offer刷題day02
- LeetCode|劍指 Offer 49.醜數LeetCode
- 劍指offer第49題 醜數
- 劍指offer解析-上(Java實現)Java
- 劍指offer解析-下(Java實現)Java
- 劍指offer 變態跳臺階
- 劍指Offer 撲克牌順子