Python程式:根據給定位置移動字元後得到最終字串


假設我們有一個小寫字串s和另一個整數列表shifts,其長度與s的長度相同。shifts[i]中的每個元素表示將s的前i+1個字母移動shifts[i]個位置。如果移動超過'z',則會環繞到'a'。我們必須找到應用shifts到s後的結果字串。

因此,如果輸入類似於s = "tomato" shifts = [2, 5, 2, 3, 7, 4],則輸出將為"qjcoes",因此,在將第一個字元移動2個位置後,它將從't'變為'v',所以字串變為"vomato",之後將前兩個字元移動5個位置,字串現在將變為"atmato",以此類推,最終字串將變為"qjcoes"。

為了解決這個問題,我們將遵循以下步驟:

  • start := 'a'的ASCII碼
  • res := s中每個i的(i - start)的ASCII碼的列表
  • 對於範圍從shifts大小-2到0的i,遞減1,執行:
    • shifts[i] := shifts[i] + shifts[i + 1]
  • 對於範圍從0到s大小-1的i,執行:
    • c := (res[i] + shifts[i]) mod 26
    • res[i] := ASCII碼為(c + start)的字元
  • 將字母res連線成字串並返回

示例

讓我們看看下面的實現,以便更好地理解:

def solve(s, shifts):
   start = ord("a")
   res = [ord(i) - start for i in s]

   for i in range(len(shifts) - 2, -1, -1):
      shifts[i] += shifts[i + 1]

   for i in range(len(s)):
      c = (res[i] + shifts[i]) % 26
      res[i] = chr(c + start)

   return "".join(res)

s = "tomato"
shifts = [2, 5, 2, 3, 7, 4]
print(solve(s, shifts))

輸入

[2, 1], 3, 2

輸出

qjcoes

更新於:2021年10月16日

597 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告