description
给定左括号和右括号的字符串,输出左右括号匹配成功的个数。
Input
第一行一个整数T,代表有T个用例。每个用例只包含‘(’和‘)’,字符串S的长度:
1≤|S|≤1,000。
Output
输出匹配成功个数。
Sample Input
3
()
((((
(())
Sample Output
1
0
2
solution
栈的应用板题。注意将栈和字符串声明为局部变量,若设置为全局变量需要清空栈,否则会出错。
#include <iostream>
#include <cstring>
#include <stack>
#include <cstdio>
using namespace std;
int main()
{
// freopen("in.txt", "r", stdin);
int N;
while (~scanf("%d", &N))
{
for (int i = 0; i < N; i++)
{
char str[1111];
stack<char> S;
scanf("%s", str);
int len = strlen(str);
int ans = 0;
for (int i = 0; i < len; i++)
{
if (str[i] == '(')
S.push(str[i]);
if (str[i] == ')')
{
if (!S.empty())
{
S.pop();
ans++;
}
}
}
printf("%d\n", ans);
}
}
return 0;
}