劍指offer Python 替換空格

2021-09-29 11:48:24 字數 2197 閱讀 1011

'''

請實現乙個函式,將乙個字串中的每個空格替換成「%20」。

'''

'''

python字串,有replace方法,可以實現替換,第乙個引數是要替換的內容,第二個引數是替換的新內容

能夠快速完成,果然python作為一種高階語言,不太適合做演算法;但是 replace 相當於「insert」,在替換

時,會將原字串元素的位置移動,導致時間複雜度增加!

'''

def

replace_space

(str_num)

:# return str_num.replace(' ', "%20")

new_str =

for i in

range

(len

(str_num)):

# 將每乙個元素遍歷,然後再放到新列表

if str_num[i]

==" "

:"%20"

)else:)

return

"".join(new_str)

print

(replace_space())

'''整個過程,元素沒有在替換乙個元素時移動,時間複雜度o(n)=n

'''

# 一種更省空間的做法,耗時差不多!c語言思路

# 摘自:

defreplace_space

( s)

:if s ==

none

:return

none

li1 =

len(s)

# 原字串的長度

space_number =

0# 用來記錄空格的數目

for i in

range

(len

(s))

:if s[i]

==" "

: space_number +=

1 li2 = li1 +

2* space_number

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

str_data =[1

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

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

p1 = li1 -

1 p2 = li2 -

1while p1 >=0:

# 設定迴圈終止條件

if s[p1]

!=" "

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

str_data[p2]

= s[p1]

p1 -=

1# 更新p1和p2

p2 -=

1else

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

str_data[p2]

="0"

str_data[p2 -1]

="2"

str_data[p2 -2]

="%"

p1 -=

1 p2 -=

3return

"".join(str_data)

print

(replace_space())

'''從後往前遍歷字串,判斷當前字元是不是空格,如果是,就用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連線起來。

'''

劍指offer(Python)替換空格

這道題要求是 將乙個字串中的空格替換成 20 有多少個空格就替換成多少個 20 例如 hello world 中間有兩個空格,則需要輸出的形式是 hello 20 20world 字串首尾的空格亦算在內。class solution def replacespace self,s return 20...

劍指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...