मान लीजिए कि हमारे पास एक स्ट्रिंग s है, तो हमें लेक्सिकोग्राफ़िक रूप से सबसे छोटी स्ट्रिंग ढूंढनी होगी जो कि दी जा सकती है यदि हम दिए गए स्ट्रिंग s में दो वर्णों के बीच अधिकतम एक स्वैप कर सकते हैं।
इसलिए, यदि इनपुट "zyzx" जैसा है, तो आउटपुट "xyzz" होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- अस्थायी:=आकार s की एक सरणी और 0 से भरें
- m:=s - 1 का आकार
- s -1 से -1 के श्रेणी आकार में i के लिए, 1 से घटाएं
- अगर s[i]
- एम:=मैं
- अगर s[i]
- अस्थायी[i] :=मी
- i के लिए 0 से लेकर s के आकार तक के लिए, करें
- a :=अस्थायी[i]
- यदि s[a], s[i] के समान नहीं है, तो
- s का रिटर्न सबस्ट्रिंग [इंडेक्स 0 से i] कॉन्कैनेटनेट s[a] s का कॉन्टेनेट सबस्ट्रिंग [इंडेक्स i+1 से a] कॉन्सटेनेट s[i] s का कॉन्टेनेट सबस्ट्रिंग [इंडेक्स a+1 से अंत तक]ली>
उदाहरण
class Solution: def solve(self, s): temp = [0]*len(s) m=len(s)-1 for i in range(len(s)-1, -1, -1): if s[i]<s[m]: m=i temp[i] = m for i in range(len(s)): a = temp[i] if s[a] != s[i]: return s[:i]+s[a]+s[i+1:a]+s[i]+s[a+1:] return s ob = Solution() print(ob.solve("zyzx"))
इनपुट
zyzx
आउटपुट
xyzz