劍指offer系列2之替換空格

2021-09-11 02:26:05 字數 2292 閱讀 4728

思路一

順序遍歷字串並複製相應的字元到新的字串中。時間複雜度o(n

)o(n)

o(n)

,空間複雜度o(n

)o(n)

o(n)

.python實現

# -*- coding:utf-8 -*-

class

solution

:# s 源字串

defreplacespace

(self, s)

:# write code here

s_re =

''for char in s:

if char ==

' ':

s_re +=

'%20'

else

: s_re += char

return s_re

python可以利用list減小空間複雜度,即不需要開闢乙個新的空間,直接在原字串中插入。

# -*- coding:utf-8 -*-

class

solution

:# s 源字串

defreplacespace

(self, s)

:# write code here

s =list

(s) length =

len(s)

for i in

range

(length)

:if s[i]

==' '

: s[i]

='%20'

s =''.join(s)

return s

# -*- coding:utf-8 -*-

class

solution

:# s 源字串

defreplacespace

(self, s)

:# write code here

s = s.replace(

' ',

'%20'

)return s

占用記憶體:5736k

思路二例:i am a student.

區別於第一種思路,該方法不需要另外開闢新的字串來實現,而是通過插入移動的方法來實現。插入有兩種實現方式,一種是從前面插入,一種是從後面插入。如果從前面插入,那麼第一次需要移動13個字元,第二次需要移動10個字元,第三次需要移動8個字元,一共需要移動13+10+8=31次。時間複雜度為o(n

2)

o(n^2)

o(n2

)。如果從後面插入,第一次需要移動8個字元,第二次需要移動1個字元,第三次需要移動2個字元,一共需要移動8+1+2=11次。時間複雜度為o(n

)o(n)

o(n)

。由於python的字串是不可變的,因此需要先轉成list再進行操作。

python實現

# -*- coding:utf-8 -*-

class

solution

:# s 源字串

defreplacespace

(self, s)

:# write code here

s =list

(s) count =

0for char in s:

if char ==

' ':

count +=

1for i in

range

(count)

:'11'

)'11'

)for i in

range

(len

(s)-1,

-1,-

1):if s[i]

!=' '

: s[i+

2*count]

= s[i]

else

: count -=

1 s[i+

2*count]

='%'

s[i+

2*count+1]

='2'

s[i+

2*count+2]

='0'

s =''.join(s)

return s

c++實現
class solution }}

;

劍指offer 空格替換 2

public class solution 方法二 新建stringbuffer拼接 public class solution else return result.tostring 附加 string 字串常量 string的值是可變的,每次的操作都會建立新的物件,很浪費空間。stringbuf...

劍指Offer之 替換空格

把字串中的空格用 20代替。統計空格個數,從後往前賦字元。include using namespace std 函式功能 把字串中的空格用 20代替 思路 統計空格個數,從後往前賦字元 注意點 要判斷字串的位元組個數是否夠替換後的字元數,如果不夠則不能替換 void replacebland ch...

劍指offer之空格替換

請實現乙個函式,把字串 s 中的每個空格替換成 20 示例 看到這道題,我們首先應該想到的是原來的空格被替換成 2 0 著三個字元,因此字串會變長,如果在原來的字串上進行替換,那麼就有可能覆蓋修改在該字串後面的記憶體。如果是建立新的字串並在上面進行替換,那麼我們可以自己分配足夠的記憶體。考慮執行替換...