मान लीजिए, हमें एक स्ट्रिंग 'input_str' दी गई है। अब, हमें दिए गए स्ट्रिंग से हर संभव सबस्ट्रिंग को निर्धारित करने के लिए कहा जाता है, फिर सभी सबस्ट्रिंग को एक के बाद एक लेक्सिकल क्रम में दूसरी स्ट्रिंग में संयोजित करें। हमें एक पूर्णांक मान k भी दिया जाता है। हमारा काम अनुक्रमित स्ट्रिंग से इंडेक्स k पर अक्षर वापस करना है।
इसलिए, यदि इनपुट input_str ='pqrs', k =6 जैसा है, तो आउटपुट p
होगा।दिए गए स्ट्रिंग से लेक्सिकल क्रम में सबस्ट्रिंग p, pq, pqr, pqrs, q, qr, qrs, r, rs, s हैं।
यदि हम स्ट्रिंग्स को जोड़ते हैं, तो यह ppqpqrpqrsqqrqrsrrss बन जाता है। स्थिति 6 पर, अक्षर 'p' है। (अनुक्रमण 0 से शुरू होता है)।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- stk_list :=एक नई सूची जिसमें एक टपल है जिसमें एक खाली स्ट्रिंग है और input_str से सभी अक्षरों की एक सूची है
- जबकि stk_list खाली नहीं है, करें
- पूर्व:=stk_list से अंतिम तत्व हटाएं
- अस्थायी:=stk_list से अंतिम तत्व हटाएं
- यदि k <पूर्व का आकार है, तो
- वापसी से पहले[k]
- k :=k - पूर्व का आकार
- input_sorted :=एक नई सूची जिसमें टुपल्स होते हैं जिनमें input_str के अक्षर और input_str में उनकी स्थिति होती है
- टुपल्स के दूसरे मान के आधार पर इनपुट_सॉर्ट की गई सूची को अवरोही क्रम में क्रमित करें
- मैं :=0
- जबकि मैं
- वैल:=input_sorted[i, 0]
- temp1 :=[input_sorted[i, 1]]
- j :=i + 1
- जबकि j
- temp1 के अंत में input_sorted[j, 1] डालें
- j :=j + 1
- stk_list के अंत में (pre+val, temp1) डालें
- i :=j
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(input_str, k): stk_list = [("",list(range(len(input_str))))] while stk_list: pre, temp = stk_list.pop() if k < len(pre): return pre[k] k -= len(pre) input_sorted = sorted([(input_str[i],i+1) for i in temp if i < len(input_str)], reverse=True) i = 0 while i < len(input_sorted): val = input_sorted[i][0] temp1 = [input_sorted[i][1]] j = i + 1 while j < len(input_sorted) and input_sorted[j][0]== val: temp1.append(input_sorted[j][1]) j += 1 stk_list.append((pre+val, temp1)) i = j return None print(solve('pqrs', 6))
इनपुट
'pqrs', 6
आउटपुट
p