贝茜刚买了一台新的笔记本电脑,但不幸的是,她发现自己打不好字,因为相对于小键盘来说,她的大蹄子太大了。
贝茜刚刚在尝试输入一个平衡括号字符串。
但是,她意识到她可能将其中某个字符输错了,即将
(
错输为 ) 或将
)
错输为
(
。
请帮助贝茜找到字符串的所有位置中,满足反转该位置上的字符后,括号字符串变得平衡的位置数量。
有若干种定义括号字符串是否“平衡”的方式。
最简单的定义为字符串所包含的
(
和
)
数量必须相同,并且对于字符串的任意前缀,所包含的
(
的数目都不少于
)
的数目。
例如,以下字符串都是平衡的:
()
(())
()(()())
以下则不是:
)(
())(
((())))
输入格式
一个长度为
输出格式
输出字符串的所有位置中,满足反转该位置上的字符后,括号字符串变得平衡的位置数量(如果有的话)。
数据范围
输入的字符串满足:最多只修改一个字符,即可变为平衡括号字符串。
输入样例:
()(())))
输出样例:
4
样例解释
输入字符串如下:
12345678
()(())))
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
string s;
cin >> s;
int l = 0, r = 0;
for(auto c: s)
if(c == '(') l++;
else r++;
if(l == r) puts("0");
else if(r > l){
int a = 0, b = 0;
for(auto c: s)
if(c == '(') a++;
else{
b++;
if(b > a){
cout << b << endl;
break;
}
}
}else{
int a = 0, b = 0;
reverse(s.begin(), s.end());
for(auto c: s)
if(c == ')') b++;
else{
a ++;
if(a > b){
cout << a << endl;
break;
}
}
}
return 0;
}