मान लीजिए कि हमारे पास लोअर और अपर केस अंग्रेजी अक्षरों के साथ एक स्ट्रिंग है। हम विचार करेंगे कि एक स्ट्रिंग एक अच्छी स्ट्रिंग है जिसमें कोई भी दो आसन्न वर्ण नहीं हैं s[i] और s[i + 1] जहां -
-
0 <=i <=s - 2 का आकार
-
s[i] लोअरकेस में है और s[i + 1] एक ही अक्षर है लेकिन अपर-केस या इसके विपरीत है।
एक स्ट्रिंग को अच्छी स्ट्रिंग में बदलने के लिए, हम दो आसन्न वर्णों का चयन कर सकते हैं जो स्ट्रिंग को खराब करते हैं और उन्हें हटा देते हैं। हम इस प्रक्रिया को तब तक जारी रखेंगे जब तक कि स्ट्रिंग अच्छी न हो जाए, (एक खाली स्ट्रिंग अच्छी हो सकती है)। स्ट्रिंग को अच्छा बनाने के बाद हमें उसे ढूंढना होता है।
इसलिए, यदि इनपुट s ="popPpulaBbr" जैसा है, तो आउटपुट "लोकप्रिय" होगा, क्योंकि पहले या तो "p P को हटा दें " या "प<उप>पीउप> " और "बीबी" हटाएं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
रेस :=एक नई सूची
-
प्रत्येक वर्ण ch इन s के लिए, करें
-
यदि रेस खाली नहीं है और रेस में अंतिम तत्व किसी भी मामले में ऊपरी या निचले हिस्से में ch के समान है, तो
-
अंतिम तत्व को रेस से हटाएं
-
-
अन्यथा,
-
रेस के अंत में ch डालें
-
-
-
रेस में मौजूद प्रत्येक तत्व से जुड़ें और उसे वापस करें
उदाहरण (पायथन)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(s): res = [] for ch in s: if res and res[-1] != ch and res[-1].lower() == ch.lower(): res.pop() else: res.append(ch) return ''.join(res) s = "popPpulaBbr" print(solve(s))
इनपुट
"popPpulaBbr"
आउटपुट
popular