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編程題彙總(持續更新中……)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章