Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมแปลงสตริงเป็นรูปแบบ Zigzag จำนวนบรรทัด k ใน Python


มีสตริง s และ k เขียนตัวอักษรทแยงลงมาจนถึงบรรทัด k แล้วทแยงขึ้น จนครบ สร้างสตริงใหม่จากการอ่านแต่ละบรรทัด

เช่น s="ilovepythonprogramming", k=5 ให้รูปแบบ zigzag ตามภาพ

ขั้นตอนการแก้ปัญหา

  • line := dict เก็บ (ตัวอักษร, ตำแหน่ง) ต่อบรรทัด
  • cnt=0, delta=1 ควบคุมทิศทางขึ้นลง
  • วนอ่าน s: ใส่ใน line[cnt], อัปเดต cnt, เปลี่ยน delta ที่ขอบ
  • สร้างแต่ละบรรทัด: ใส่ตัวอักษรในตำแหน่งเดิม ที่เหลือเว้นวรรค
  • รวมบรรทัดด้วย newline

ตัวอย่างโค้ด

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

เอาต์พุต

โปรแกรมแปลงสตริงเป็นรูปแบบ Zigzag จำนวนบรรทัด k ใน Python