題目描述
一個完整的括號字符串定義規則如下:
1、空字符串是完整的。
2、如果s是完整的字符串,那麼(s)也是完整的。
3、如果s和t是完整的字符串,將它們連接起來形成的st也是完整的。
例如,"(()())", ""和"(())()"是完整的括號字符串,"())(", "()(" 和 ")"是不完整的括號字符串。
牛牛有一個括號字符串s,現在需要在其中任意位置儘量少地添加括號,將其轉化爲一個完整的括號字符串。請問牛牛至少需要添加多少個括號。
輸入描述:
輸入包括一行,一個括號序列s,序列長度length(1 ≤ length ≤ 50). s中每個字符都是左括號或者右括號,即'('或者')'.
輸出描述:
輸出一個整數,表示最少需要添加的括號數
示例1
輸入
複製
(()(()
輸出
複製
2
只是單個括號,記錄非法右括號和多餘的左括號次數。
如果是多個括號,就要藉助棧來求解
#include<iostream>
#include<string>
using namespace std;
int main()
{
int right = 0;
int left = 0;
int ans = 0;
string str;
cin >> str;
for(int i = 0; i < str.size(); ++i)
{
if(str[i] == '(')
{
++left;
}
else
{
if(left > 0)
{
--left;
}
else
{
++ans;
}
}
}
if(left > 0)
ans += left;
cout << ans << endl;
return 0;
}