मान लीजिए कि हमारे पास एक स्ट्रिंग s और दूसरा मान k है, हमें s से प्रत्येक वर्ण लेकर और kth लाइन तक पहुंचने तक ऊपर से नीचे दाईं ओर तिरछे शुरू करके एक नई स्ट्रिंग ढूंढनी है, फिर ऊपर दाईं ओर जाना है, और इसी तरह।
इसलिए, यदि इनपुट s ="ilovepythonprogramming" k =5 जैसा है, तो आउटपुट होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- पंक्ति:=एक नया नक्शा
- सीएनटी:=0
- डेल्टा:=1
- प्रत्येक अनुक्रमणिका i और s में वर्ण c के लिए, करें
- पंक्ति के अंत में (c, i) डालें[cnt]
- सीएनटी:=सीएनटी + डेल्टा
- यदि cnt, k के समान है, तो
- डेल्टा:=-1
- सीएनटी:=के - 2
- यदि cnt 0 के समान है, तो
- डेल्टा:=1
- उत्तर:=एक नई सूची
- प्रत्येक कुंजी के लिए i और मूल्य c पंक्ति में, करते हैं
- उपसर्ग :=s के समान आकार की एक सूची और उसे एकल रिक्त स्थान से भरें
- सी में प्रत्येक जोड़ी (x, y) के लिए, करें
- उपसर्ग[y] :=x
- उपसर्ग में मौजूद प्रत्येक तत्व से जुड़ें और इसे उत्तर में डालें
- उत्तर में लगातार प्रत्येक तत्वों के बीच एक नई लाइन जोड़कर एक नई स्ट्रिंग लौटाएं
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें:
उदाहरण
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
आउटपुट