1. 程式人生 > 其它 >Python程式設計題41--原地反轉字串

Python程式設計題41--原地反轉字串

題目

針對一個字串,該字串是以字元列表的形式存在,請編寫一個函式,實現將字串反轉過來。

例如:

給定一個字元列表:["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程式設計題彙總(持續更新中……)

作者:wintest 出處:https://www.cnblogs.com/wintest 本文版權歸作者和部落格園共有,歡迎轉載,但必須在文章頁面明顯位置給出原文連結,並保留此段宣告,否則保留追究法律責任的權利。