貝茜剛買了一台新的筆記本電腦,但不幸的是,她發現自己打不好字,因為相對于小鍵盤來說,她的大蹄子太大了。
貝茜剛剛在嘗試輸入一個平衡括号字元串。
但是,她意識到她可能将其中某個字元輸錯了,即将
(
錯輸為 ) 或将
)
錯輸為
(
。
請幫助貝茜找到字元串的所有位置中,滿足反轉該位置上的字元後,括号字元串變得平衡的位置數量。
有若幹種定義括号字元串是否“平衡”的方式。
最簡單的定義為字元串所包含的
(
和
)
數量必須相同,并且對于字元串的任意字首,所包含的
(
的數目都不少于
)
的數目。
例如,以下字元串都是平衡的:
()
(())
()(()())
以下則不是:
)(
())(
((())))
輸入格式
一個長度為
輸出格式
輸出字元串的所有位置中,滿足反轉該位置上的字元後,括号字元串變得平衡的位置數量(如果有的話)。
資料範圍
輸入的字元串滿足:最多隻修改一個字元,即可變為平衡括号字元串。
輸入樣例:
()(())))
輸出樣例:
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;
}