這道題要求是:
將乙個字串中的空格替換成「%20」;
有多少個空格就替換成多少個「%20」,例如「hello world」中間有兩個空格,則需要輸出的形式是:「hello%20%20world」;
字串首尾的空格亦算在內。
split用法class
solution
:def
replacespace
(self, s)
:return
"%20"
.join(s.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...