在Python中将字符串转换为k行锯齿形字符串的程序

在Python中将字符串转换为k行锯齿形字符串的程序

假设我们有一个字符串s和另一个值k,我们要通过从左上角对角线开始到达第k行,然后向上到右上角,以此类推,从s中取每个字符来找到一个新的字符串。

因此,如果输入是s =“ ilovepythonprogramming” k = 5,则输出将为

在Python中将字符串转换为k行锯齿形字符串的程序

为解决此问题,我们将遵循以下步骤:

  • line:=一个新的映射
  • cnt:= 0
  • delta:= 1
  • 对于s中的每个索引i和字符c,做以下操作:
    • 在line[cnt]的末尾插入(c,i)
    • cnt:=cnt + delta
    • 如果cnt与k相同,则
      • delta:= -1
      • cnt:= k – 2
    • 如果计数器等于0,则
      • delta:= 1
  • ans:=一个新列表
  • 对于line中的每个键i和值c,做以下操作:
    • prefix:=一个大小与s相同的列表,并填充单个空格
    • 对于c中的每个(x,y)对,执行以下操作:
      • prefix[y]:=x
    • 连接prefix中的每个元素并将其插入ans中
  • 通过在ans中的每个连续元素之间添加新行来返回一个新的字符串

让我们看以下实现,以便更好地理解:

更多Python相关文章,请阅读:Python 教程

示例

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

输出

在Python中将字符串转换为k行锯齿形字符串的程序

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程