'''
請實現乙個函式,將乙個字串中的每個空格替換成「%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...