題目
針對一個字符串,該字符串是以字符列表的形式存在,請編寫一個函數,實現將字符串反轉過來。
例如:
給定一個字符列表:["h", "e", "l", "l", "o"],返回結果:["o", "l", "l", "e", "h"]
給定一個字符列表:["h", "a", "n", "n", "a", "H"],返回結果:["H", "a", "n", "n", "a", "h"]
說明:
- 不允許使用其他的列表,只能在原列表上處理
- 不允許使用編程語言的內置函數實現反轉,也不允許對列表進行切片操作
實現思路1
- 使用
雙指針
來實現 - 定義兩個指針:left 和 right,left 從列表第一個位置向中間移動,right 從列表最後一個位置向中間移動
- left 和 right 移動過程中,每次都交換對應的元素,當 left 大於或等於 right 時,停止移動,此時即完成對列表元素的反轉
代碼實現1
def reverseString(s):
left, right = 0, len(s) - 1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
實現思路2
- 使用
位運算
來實現 - 針對列表 s,我們要實現原地反轉,只需要讓前一半元素與後一半元素進行交換即可,如果當前元素下標是 i,那麼需交換元素的下標即爲 - i - 1
- 在
~
按位取反運算中:~i
=- i - 1
,所以我們直接讓 s[i] 與 s[~i] 交換就行
代碼實現2
def reverseString(s):
for i in range(len(s) // 2):
s[i], s[~i] = s[~i], s[i]
更多Python編程題,等你來挑戰:Python編程題彙總(持續更新中……)