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

โปรแกรมแปลงสตริงเป็นสตริงซิกแซกของจำนวนบรรทัด k ใน python


สมมติว่าเรามีสตริง s และอีกค่าหนึ่งคือ k เราต้องหาสตริงใหม่โดยนำอักขระแต่ละตัวจาก s มาและเริ่มในแนวทแยงมุมจากบนซ้ายไปล่างขวาจนถึงบรรทัดที่ k แล้วขึ้นไปบนขวาเป็นต้น

ดังนั้น หากอินพุตเป็นเหมือน s ="ilovepythonprogramming" k =5 ผลลัพธ์จะเป็น

โปรแกรมแปลงสตริงเป็นสตริงซิกแซกของจำนวนบรรทัด k ใน python

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:

  • line :=แผนที่ใหม่
  • cnt :=0
  • เดลต้า :=1
  • สำหรับแต่ละดัชนี i และอักขระ c ใน s ทำ
    • แทรก (c, i) ที่ท้ายบรรทัด[cnt]
    • cnt :=cnt + เดลต้า
    • ถ้า cnt เหมือนกับ k แล้ว
      • เดลต้า :=-1
      • cnt :=k - 2
    • ถ้า cnt เหมือนกับ 0 แล้ว
      • เดลต้า :=1
  • ans :=รายการใหม่
  • สำหรับแต่ละคีย์ i และค่า c ในบรรทัด ให้ทำ
    • prefix :=รายการที่มีขนาดเท่ากับ s และเติมด้วยช่องว่างเดียว
    • สำหรับแต่ละคู่ (x, y) ใน c ทำ
      • คำนำหน้า[y] :=x
    • รวมแต่ละองค์ประกอบที่อยู่ในคำนำหน้าและแทรกลงใน 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

ผลลัพธ์

โปรแกรมแปลงสตริงเป็นสตริงซิกแซกของจำนวนบรรทัด k ใน python