在Python中将字符串转换为k行锯齿形字符串的程序
假设我们有一个字符串s和另一个值k,我们要通过从左上角对角线开始到达第k行,然后向上到右上角,以此类推,从s中取每个字符来找到一个新的字符串。
因此,如果输入是s =“ ilovepythonprogramming” k = 5,则输出将为
为解决此问题,我们将遵循以下步骤:
- 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