Python程式:將字串轉換為行數為k的Z字形字串


假設我們有一個字串s和另一個值k,我們需要透過從s中獲取每個字元並從左上到右下對角線開始,直到到達第k行,然後向上到右上,依此類推,來找到一個新的字串。

因此,如果輸入類似於s = "ilovepythonprogramming" k = 5,則輸出將為

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

  • line := 一個新的對映
  • cnt := 0
  • delta := 1
  • 對於s中的每個索引i和字元c,執行以下操作
    • 將(c, i)插入line[cnt]的末尾
    • cnt := cnt + delta
    • 如果cnt等於k,則
      • delta := -1
      • cnt := k - 2
    • 如果cnt等於0,則
      • delta := 1
  • ans := 一個新的列表
  • 對於line中的每個鍵i和值c,執行以下操作
    • prefix := 一個大小與s相同的列表,並用單個空格填充
    • 對於c中的每個對(x, y),執行以下操作
      • prefix[y] := x
    • 連線prefix中存在的每個元素並將其插入ans
  • 返回一個新的字串,在ans中每個連續元素之間新增一個換行符

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

示例

線上演示

from collections import defaultdict
class Solution:
   def solve(self, s, k):
      line = defaultdict(list)
      cnt = 0
      delta = 1
      for i, c in enumerate(s):
         line[cnt].append((c, i))
         cnt += delta
         if cnt == k:
            delta = -1
            cnt = k - 2
         if cnt == 0:
            delta = 1

      ans = []

      for i, c in line.items():
         prefix = [" "] * (len(s))
         for x, y in c:
            prefix[y] = x
         ans.append("".join(prefix))

      return "\n".join(ans)

ob = Solution()
s = "ilovepythonprogramming"
k = 5
print(ob.solve(s, k))

輸入

"ilovepythonprogramming", 5

輸出

更新於:2020年11月26日

297 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.