ধরা যাক s নামক একটি স্ট্রিং আছে যাতে '(' এবং ')' ব্র্যাকেট থাকে, আমাদের সমবায়ন ব্র্যাকেট সম্বলিত সর্বোচ্চ সাবসিকোয়েন্সের দৈর্ঘ্য খুঁজে বের করতে হবে।
উদাহরণ: s = "())(()(" হলে আউটপুট 4, কারণ "()()" সাবসিকোয়েন্স নেওয়া যায়।
সমাধানের ধাপসমূহ
- res := 0, n := len(s), close := 0
- i = n-1 থেকে 0 পর্যন্ত রিভার্স লুপ:
- যদি s[i] == ')' হয়, close := close + 1
- অন্যথায়, যদি close > 0 হয়, close := close - 1, res := res + 2
- res ফেরত দিন।
উদাহরণ কোড
class Solution:
def solve(self, s):
res = 0
n = len(s)
close = 0
for i in range(n - 1, -1, -1):
if s[i] == ")":
close += 1
else:
if close > 0:
close -= 1
res += 2
return res
ob = Solution()
s = "())(()("
print(ob.solve(s))
ইনপুট
"())(()("
আউটপুট
4