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

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
- 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
ผลลัพธ์
