मान लीजिए हमारे पास एक स्ट्रिंग s और एक मान k है, हमें s से प्रत्येक वर्ण लेकर एक नई स्ट्रिंग ढूंढनी है और ऊपरी बाएं से निचले दाएं तक विकर्ण रूप से शुरू करके kवीं लाइन तक पहुंचने तक, फिर ऊपरी दाएं तक जाएं, और इसी तरह।
उदाहरण के लिए, यदि इनपुट s = "ilovepythonprogramming" k = 5 है, तो आउटपुट होगा:

इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
- line := एक नया मैप
- cnt := 0
- delta := 1
- प्रत्येक इंडेक्स i और वर्ण c के लिए s में, करें
- (c, i) को line[cnt] के अंत में डालें
- cnt := cnt + delta
- यदि cnt, k के समान है, तो
- delta := -1
- cnt := k - 2
- यदि cnt, 0 के समान है, तो
- delta := 1
- ans := एक नई सूची
- प्रत्येक कुंजी i और मान c के लिए line में, करें
- prefix := s के आकार की सूची और एकल रिक्त स्थान से भरी
- प्रत्येक जोड़ी (x, y) के लिए c में, करें
- prefix[y] := x
- prefix में मौजूद प्रत्येक तत्व को जोड़ें और 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
आउटपुट
