官方解法
力扣鏈結
請實現乙個函式,把字串 s 中的每個空格替換成"%20"。
通過迴圈整個字串,每找到乙個空格,替換成「%20」,字串後面的字元往後移動3位。時間複雜度o(n2)。方法不好。
1:先找到字串(s1)中所有的空格數,這樣就能直到替換後字串的長度(s2),s2.length() = s1.length() + count*2;
2:從s1字串的末尾位字元開始判斷是否為空格,如果是,從後往前向s2字串中寫入「%20」,s2的下標先前移動三位,s1的下標向前移動一位;如果不是,將字元從s1複製到s2,下標都前移一位。
3:如果兩個下標相等,說明s1字串前面已經沒有空格了。直接將前面相同的字元複製即可。
class
solution
//s1這樣處理後會變短,所以不要處理形參
//計算將空格轉換成%20後字串長度
int counttrans = s.
length()
+ count*2-
1;//替換後長度
int counts = s.
length()
-1;char
transstring =
newchar
[counttrans+1]
;//while(counts <= counttrans && counts >1)
else
counts--;}
//將前面沒有空格的字串替複製到另乙個陣列
for(
int i=
0;i<=counttrans;i++)
string re =
newstring
(transstring)
;return re;
}}
時空複雜度都是:o(n);
如何確定字串中某個字元的個數:
1.可以利用for迴圈遍歷
public
class
lengthisincludespace
system.out.
println
(count2);}
}
2.其他方法:
利用map,鍵值與數值對應:鏈結
上面**中方案:注意會改變原字串,但是這個還可以統計子字串。子字串統計
如何獲取字串中某個指定下標的字元
string.
charat
(i);
區別於indexof()
public int indexof(int ch): 返回指定字元在字串中第一次出現處的索引,如果此字串中沒有這樣的字元,則返回 -1。
建立特定長度的陣列
char
str =
newchar[10
];
設定字串中特定下標位置的字元
需要利用stringbuilder構造字串,然後使用setcharat(index, char)即可。index:位置,char:想要替換的字元。最後使用tostring()在轉換成字元即可。string類中沒有直接方法能夠設定某個位置的字元。
如何轉換字元陣列和字串
字元陣列到字串:
string string =
newstring
(array)
;string string2 = string.
valueof
(array)
;
字串到字元陣列:
string msg =
"i am a good boy!"
;char
dest = msg.
tochararray()
;
class
solution
return res.
tostring()
;}}
利用stringbuild構造器。**解釋 劍指offer面試題 替換空格
題目 請實現乙個函式,把字串中的每個空格替換成 20 例如輸入 則輸出 解析 時間複雜度為o n 的解法。完整 及測試用例實現 cpp view plain copy include using namespace std include length 為字元陣列string的總容量 void re...
劍指 面試題5 替換空格
題目 請實現乙個函式,把字串 s 中的每個空格替換成 20 思路1 這裡leetcode上c 給出的是乙個string,直接使用string.replace 考慮到乙個字串中可能有多個空格,用string.find 找空格,如果未找到,則返回string.npos。如果是char陣列,可以考慮思路2...
替換空格(劍指offer面試題4)
分析 從頭到尾掃瞄字串,遇到空格就替換,導致後面的字元都要向後移,意味著總時間複雜度為o n 2 更好的辦法,從字串後面遍歷替換。先遍歷所有的空格,每多乙個空格,字串長度加2個,也就是說最後替換後的字串長度為原長度 2 空格數,設定兩個指標,指向原始字串末尾和新字串末尾,依次向前遍歷,原始字串指標遇...