Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình chuyển đổi một chuỗi thành chuỗi ngoằn ngoèo có số dòng k trong python

Giả sử chúng ta có một chuỗi s và một giá trị khác k, Chúng ta phải tìm một chuỗi mới bằng cách lấy từng ký tự từ s và bắt đầu theo đường chéo từ trên cùng bên trái sang dưới cùng bên phải cho đến khi đến dòng thứ k, sau đó đi lên trên cùng bên phải, v.v.

Vì vậy, nếu đầu vào là s =​​"ilovepythonprogramming" k =5, thì đầu ra sẽ là

Chương trình chuyển đổi một chuỗi thành chuỗi ngoằn ngoèo có số dòng k trong python

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau:

  • line:=một bản đồ mới
  • cnt:=0
  • delta:=1
  • đối với mỗi chỉ mục i và ký tự c trong s, thực hiện
    • chèn (c, i) vào cuối dòng [cnt]
    • cnt:=cnt + delta
    • nếu cnt giống k, thì
      • delta:=-1
      • cnt:=k - 2
    • nếu cnt giống 0, thì
      • delta:=1
  • ans:=một danh sách mới
  • đối với mỗi khóa i và giá trị c trong dòng, hãy thực hiện
    • prefix:=một danh sách có kích thước giống như s và điền vào đó bằng những khoảng trống duy nhất
    • đối với mỗi cặp (x, y) trong c, thực hiện
      • tiền tố [y]:=x
    • nối từng phần tử có trong tiền tố và chèn nó vào ans
  • trả về một chuỗi mới bằng cách thêm một dòng mới giữa mỗi phần tử liên tiếp trong ans

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn:

Ví dụ

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

Chương trình chuyển đổi một chuỗi thành chuỗi ngoằn ngoèo có số dòng k trong python