Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình chuyển chuỗi thành chuỗi zigzag k dòng bằng Python


Cho chuỗi s và số dòng k. Viết chuỗi theo ziczac: chéo xuống đến dòng k, chéo lên đến dòng 1, lặp lại. Trả về chuỗi các dòng nối bằng xuống dòng.

Ví dụ: s="ilovepythonprogramming", k=5 → xuất ra hình ziczac.

Giải thuật

  • Duyệt s, biến cnt (dòng hiện tại) và delta (hướng: +1 xuống, -1 lên).
  • Khi cnt == k: đổi hướng lên, cnt = k-2.
  • Khi cnt == 0: đổi hướng xuống, delta = 1.
  • Gom ký tự theo dòng vào line[cnt] kèm vị trí gốc.
  • Sau khi duyệt xong, xây dựng từng dòng: mảng khoảng trắng độ dài len(s), điền ký tự tại vị trí gốc, nối thành chuỗi.
  • Nối các dòng bằng \n.

Ví dụ minh họa

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))

Đầu vào

"ilovepythonprogramming", 5

Đầu ra

(xuất ra hình ziczac)