मान लीजिए कि हमारे पास एक स्ट्रिंग s और दो मान x और y हैं। दिए गए दो प्रकार के ऑपरेशन को हम कितनी भी बार कर सकते हैं।
-
खोज विकल्प "ab", यदि मौजूद है, तो हम इसे हटाकर x अंक प्राप्त कर सकते हैं।
-
खोज विकल्प "ba", यदि मौजूद है, तो हम इसे हटाकर y अंक प्राप्त कर सकते हैं।
हमें ऊपर दिए गए ऑपरेशनों को s पर लागू करने के बाद अधिकतम अंक प्राप्त करने होंगे।
इसलिए, यदि इनपुट s ="cbbaacdeabb" x =4 y =5 जैसा है, तो आउटपुट 14 होगा क्योंकि प्रारंभिक स्ट्रिंग "cbbaacdeabb" है, फिर 4 प्राप्त करने के लिए "cbbaacde(ab)b" को हटा दें, अब स्ट्रिंग है " cbbaacdeb", फिर अधिक 5 प्राप्त करने के लिए "cb(ba)acdeb" को हटा दें, इसलिए वर्तमान स्कोर 4+5 =9, अब स्ट्रिंग "cbacdeb" है, फिर अतिरिक्त 5 प्राप्त करने के लिए "c(ba)cdeb" को फिर से हटा दें। स्कोर 9+5=14, और स्ट्रिंग "ccdeb" है, अब आगे हटाने के लिए कुछ भी नहीं है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- a :='a', b :='b'
- उत्तर:=0, a_st:=0, b_st:=0
- यदि y> x, तो
- ए और बी स्वैप करें
- एक्स और वाई स्वैप करें
- प्रत्येक c in s के लिए, करें
- यदि c, a के समान है, तो
- a_st :=a_st + 1
- अन्यथा जब c, b के समान हो, तो
- अगर a_st गैर-शून्य है, तो
- उत्तर:=उत्तर + x
- a_st :=a_st - 1
- अन्यथा,
- b_st +=1
- अगर a_st गैर-शून्य है, तो
- अन्यथा,
- उत्तर:=उत्तर + y * न्यूनतम a_st और b_st
- a_st :=0
- b_st :=0
- यदि c, a के समान है, तो
- वापसी उत्तर + y * न्यूनतम a_st और b_st
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(s, x, y): a = 'a' b = 'b' ans = 0 a_st = 0 b_st = 0 if y > x: a,b = b,a x,y = y,x for c in s: if c == a: a_st += 1 elif c == b: if a_st: ans += x a_st -= 1 else: b_st += 1 else: ans += y * min(a_st, b_st) a_st = 0 b_st = 0 return ans + y * min(a_st, b_st) s = "cbbaacdeabb" x = 4 y = 5 print(solve(s, x, y))
इनपुट
"cbbaacdeabb", 4, 5
आउटपुट
14