题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3016
题意:
给你一个括号序列,问你至少修改多少个括号,才能使这个括号序列合法。
题解:
贪心。
cnt表示当前已经攒了多少个左括号。
从左往右枚举每一个括号:
(1)如果为左括号,则cnt++。
(2)如果为右括号,且cnt > 0,则cnt--。表示消去了一个左括号。
(3)如果为右括号,且cnt <= 0,则cnt++,ans++。因为此时一定要改。
最后ans还要加上cnt/2,因为在剩下的左括号中,至少要将一半改为右括号。
AC Code:
#include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; int cnt=;
int ans=;
string s; int main()
{
cin>>s;
for(int i=;i<s.size();i++)
{
if(s[i]=='(') cnt++;
else if(cnt>) cnt--;
else cnt++,ans++;
}
cout<<ans+cnt/<<endl;
}