मान लीजिए कि हमारे पास एक स्ट्रिंग S है। लंबाई n है। एक दूसरे से सटे ये n बॉक्स, I स्थिति में एक वर्ण R दर्शाता है कि i-th बॉक्स को दाईं ओर धकेला जा रहा है। इसी तरह, I स्थिति में L यह दर्शाता है कि i-वें बॉक्स को बाईं ओर धकेला जा रहा है, एक बिंदु '।' रिक्त स्थान को इंगित करता है। प्रारंभिक विन्यास से शुरू होकर, हर समय इकाई में, एक बॉक्स को दाईं ओर धकेला जा रहा है, अगले बॉक्स को दाईं ओर धकेलने में सक्षम है, वही क्रिया बाईं ओर भी लागू की जा सकती है। हमें सभी बक्सों की अंतिम स्थिति का पता लगाना होगा, जब कोई और हलचल संभव न हो।
इसलिए, यदि इनपुट R..R...L. जैसा है, तो आउटपुट RRRRR.LL.
होगा।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- N :=स्ट्रिंग का आकार
- आंदोलन:=आकार N की सरणी, 0s से भरें
- एम :=0
- मैं के लिए 0 से N की सीमा में, करते हैं
- यदि स्ट्रिंग [i] 'R' के समान है, तो
- एम:=एन
- अन्यथा जब स्ट्रिंग [i] 'L' के समान हो, तो
- एम :=0
- अन्यथा,
- m :=अधिकतम m-1, 0
- आंदोलन[i] :=आंदोलन[i] + मी
- यदि स्ट्रिंग [i] 'R' के समान है, तो
- एम :=0
- एन -1 से -1 की श्रेणी में i के लिए, 1 से घटाएं
- यदि स्ट्रिंग [i] 'L' के समान है, तो
- एम:=एन
- अन्यथा जब string[i] 'R' के समान हो, तब
- एम :=0
- अन्यथा,
- m :=अधिकतम m-1, 0
- आंदोलन[i] :=आंदोलन[i] - मी
- यदि स्ट्रिंग [i] 'L' के समान है, तो
- यदि m 0 है तो डॉट जोड़कर एक स्ट्रिंग बनाएं अन्यथा 'R' जब m> 0, अन्यथा प्रत्येक तत्व m के लिए 'L' गति में है।
उदाहरण कोड
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def get_final_pos(string): N = len(string) movement = [0] * N m = 0 for i in range(0, N): if string[i] == 'R': m = N elif string[i] == 'L': m = 0 else: m = max(m - 1, 0) movement[i] += m m = 0 for i in range(N - 1, -1, -1): if string[i] == 'L': m = N elif string[i] == 'R': m = 0 else: m = max(m - 1, 0) movement[i] -= m return "".join('.' if m == 0 else 'R' if m > 0 else 'L' for m in movement) print(get_final_pos('R..R...L.'))
इनपुट
'R..R...L.'
आउटपुट
RRRRR.LL.