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
输出

广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP