劍指 面試題5 替換空格

2021-10-03 22:02:23 字數 1708 閱讀 2901

題目

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

思路1:

這裡leetcode上c++給出的是乙個string,直接使用string.replace(),考慮到乙個字串中可能有多個空格,用string.find()找空格,如果未找到,則返回string.npos。如果是char陣列,可以考慮思路2。

思路2:

按照劍指提供的思路,需要考慮替換後記憶體的大小,先統計空格個數,再申請乙個新的字串,從後往前進行賦值。

python裡也有str.replace(),似乎時間複雜度高;str.count()似乎也比較高,所以這裡python使用劍指的思路實現,先把str轉換成list,最後再將list轉換成str,比較麻煩。

總結

c++裡面string還是比char陣列方便。

string.find()找不到時會返回string,npos,找到時會返回下標序號。

合併字串或陣列時,逆序可能會減少元素移動次數。

c++

class

solution

return s;}}

;

python

class

solution

:class

solution

:def

replacespace

(self, s:

str)

->

str:

iflen

(s)==0:

return s

s =list

(s) old_length =

len(s)

i =0 space_num =

0while i!=old_length:

if s[i]

==" "

: space_num+=

1 i+=

1 new_length = old_length + space_num*

2 p1 = old_length-

1 p2 = new_length-

1 ss =[0

]*new_length

while

(p1 >=0)

:if s[p1]

==" "

: ss[p2]

="0"

p2 -=

1 ss[p2]

="2"

p2-=

1 ss[p2]

="%"

p2-=

1else

: ss[p2]

= s[p1]

p2-=

1 p1-=

1 sss =

""for each in ss:

sss+=

str(each)

return sss

劍指Offer 面試題5替換空格

note 劍指offer的題可以在牛客網上做題驗證思路的正確性 思路 因為stringbuffer本身是可變字串序列,可以修改,實際上它的可變是犧牲空間換取的。替換可能導致超出其容量,char陣列的複製和新建。public string replacespace stringbuffer str s...

劍指offer 面試題5 替換空格

拿到這個題時,第乙個要考慮的就是記憶體夠不夠的問題。因為原來空格是乙個字元,現在要將乙個空格替換為三個字元,記憶體會變大。現在假設是在記憶體足夠的情況下修改。過程如下 完成乙個空格的替換 完成替換 測試用例的考慮 如下 void changestr char arr,int sz int i 0 i...

劍指offer面試題5 替換空格

面試題5 替換空格 思路一 新建乙個足夠的大小的字串空間,然後依次將字元拷貝,遇到空格進行三個字元的填充,接著重複執行前面的操作將整個字串替換完畢。時間複雜度o n 空間複雜度o n 思路二 從頭到尾掃瞄字串,每次遇到空格將後續字元向後移動兩個位置,然後進行填充。時間複雜度o n 2 思路三 從尾部...