मान लीजिए कि हमारे पास एक स्ट्रिंग s और एक मान k है। k का मान s की लंबाई का गुणनखंड है, मान लीजिए कि लंबाई n है। हम s को n/k विभिन्न सबस्ट्रिंग्स में विभाजित कर सकते हैं जिन्हें t_i आकार k कहा जाता है। फिर इन t_i का उपयोग u_i को ऐसा बनाने के लिए करें कि
-
u_i में मौजूद वर्ण t_i में वर्णों के बाद होते हैं
-
इन स्ट्रिंग से कोई भी दोहराए गए वर्ण हटा दिए जाएंगे जैसे कि u_i में प्रत्येक वर्ण की आवृत्ति 1
. है
हमें इन u_i स्ट्रिंग्स को ढूंढना है
इसलिए, यदि इनपुट s ="MMPQMMMRM" k =3 जैसा है, तो आउटपुट ["MP", "QM", "MR"] होगा क्योंकि s का आकार 9 है, और k 3 है, इसलिए 9/ 3 =3. स्ट्रिंग्स एमएमपी, क्यूएमएम और एमआरएम हैं, लेकिन चूंकि हम डुप्लीकेट वर्णों का समर्थन नहीं करते हैं, तो वे एमपी, क्यूएम और एमआर होंगे।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- मैं :=0
- रिट:=एक नई सूची
- सांसद:=एक नया नक्शा
- to_print :=रिक्त स्ट्रिंग
- जबकि मैं
- यदि i mod k 0 के समान है और i 0 नहीं है, तो
- रिटर्न के अंत में to_print डालें
- एमपी साफ़ करें और टू_प्रिंट साफ़ करें
- यदि s[i] एमपी में मौजूद नहीं है, तो
- एमपी[एस[i]]:=0
- to_print :=to_print + s[i]
- i :=i + 1
- यदि i mod k 0 के समान है और i 0 नहीं है, तो
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
def solve(s, k): i = 0 ret = [] mp, to_print = {}, "" while i < len(s): if i % k == 0 and i != 0: ret.append(to_print) mp, to_print = {}, "" if s[i] not in mp.keys(): mp[s[i]] = 0 to_print += s[i] i += 1 ret.append(to_print) return ret s = "MMPQMMMRM" k = 3 print(solve(s, k))
इनपुट
"MMPQMMMRM", 3
आउटपुट
['MP', 'QM', 'MR']