劍指offer(Python)替換空格

2021-09-27 10:43:05 字數 1881 閱讀 5926

這道題要求是:

將乙個字串中的空格替換成「%20」;

有多少個空格就替換成多少個「%20」,例如「hello world」中間有兩個空格,則需要輸出的形式是:「hello%20%20world」;

字串首尾的空格亦算在內。

class

solution

:def

replacespace

(self, s)

:return

"%20"

.join(s.split(

" ")

)

split用法

join用法

這屬於投機取巧,在遇見問題時我們可以這樣解決,但抱著學習的態度就不可了。

從後往前遍歷字串,判斷當前字元是不是空格,如果是,就用20%替換。這樣替換空格之後的字元不用每次再往後移動兩個位置。

具體來說,可以這樣去想:

1.先從後往前遍歷字串,得到整個字串中的空格數和字元數,原始字串的長度為l1,空格數為n。然後進一步生成長度為l2的新的字串(用於替換),其中l2 = l1+2*n;

2.重新生成乙個長度為l2的新的字串str,以便後面進行替換;

3.設定兩個指標,p1和p2,用來分別指向新舊兩個字串,出初始值分別設定為l1-1和l2-1(從後往前遍歷);

4.從後往前遍歷,如果當前的字元不是空格,那麼str[p2] = s[p1],並更新p1和p2;如果當前的字元是空格,那麼str[p2]=0,str[p2-1]=2,str[p2-2]=%,然後更新p1為p1-1,p2為p2-3;

5.當迴圈結束時,將新字串str用join連線起來。

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

class

solution

:# s 源字串

defreplacespace

(self, s)

:# write code here

if s ==

none

:return

none

l1 =

len(s)

# 原字串的長度

spacenumber =

0# 用來記錄空格的數目

for i in

range

(len

(s))

:if s[i]

==" "

: spacenumber +=

1 l2 = l1 +

2*spacenumber

# 因為乙個空格要用% 2 0三個字元來替換,因此也就是原字串有乙個空格,新字串的長度就要加2

str=[1

]* l2 # 生成乙個長度為l2的列表,用來填充

# 設定兩個指標,分別指向s和str的尾部

p1 = l1 -

1 p2 = l2 -

1while p1 >=0:

# 設定迴圈終止條件

if s[p1]

!=" "

:# 如果s當前的空格不為空,直接落下即可。

str[p2]

= s[p1]

p1 -=

1# 更新p1和p2

p2 -=

1else

:# 如果為空,那麼就要用%20來替換了

str[p2]

="0"

str[p2-1]

="2"

str[p2-2]

="%"

p1 -=

1 p2 -=

3return

"".join(

str)

# 連線str列表,生成字串

劍指offer Python 替換空格

請實現乙個函式,將乙個字串中的每個空格替換成 20 python字串,有replace方法,可以實現替換,第乙個引數是要替換的內容,第二個引數是替換的新內容 能夠快速完成,果然python作為一種高階語言,不太適合做演算法 但是 replace 相當於 insert 在替換 時,會將原字串元素的位置...

劍指offer Python版 替換空格

問題1 替換字串,是在原來的字串上做替換,還是可以重新定義乙個字串做替換 問題2 從前往後替換和從後往前替換一樣嗎?從左往右遍歷元素,若當前元素為空格,則插入 20 並將字串長度增加3.時間複雜度o n n coding utf 8 class solution s 源字串 def replaces...

劍指offer(python版) 2 替換空格

牛客網 leetcode 1 暴力解題 replace直接替換 2 從前向後記錄 數目,從前向後替換 class solution s 源字串 def replacespace self,s write code here 方法一 暴力解題 replace函式替換 s s.replace 20 re...