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 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告