मान लीजिए हमारे पास एक स्ट्रिंग s और एक मान k है। k का मान s की लंबाई का एक गुणक है, मान लें लंबाई n है। हम s को n/k अलग-अलग सबस्ट्रिंग्स में विभाजित कर सकते हैं जिन्हें आकार k के t_i कहा जाता है। फिर इन 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। स्ट्रिंग्स MMP, QMM और MRM हैं, लेकिन चूंकि हम डुप्लिकेट वर्णों का समर्थन नहीं करते, तो वे MP, QM और MR होंगे।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
- i := 0
- ret := एक नई सूची
- mp := एक नया मैप
- to_print := खाली स्ट्रिंग
- जब तक i < s का आकार, करें
- यदि i mod k, 0 के समान है और i 0 नहीं है, तो
- to_print को ret के अंत में डालें
- mp और to_print को क्लियर करें
- यदि s[i], mp में मौजूद नहीं है, तो
- mp[s[i]] := 0
- to_print := to_print + s[i]
- i := i + 1
- यदि i mod k, 0 के समान है और i 0 नहीं है, तो
- to_print को ret के अंत में डालें
- ret लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
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']