这道题其实不难,你但凡做过括号表达式就能AC(没有做过当我没说)
但这道题就算你没有做过括号表达式一样可以做。
用栈
如果是左括号则入栈;如果是右括号,只要栈非空就说明有一对合法括号。
使用 tmp来记录栈中的元素个数。
(一边读入,一边进行入栈出栈;并且不使用真正的栈而是虚构一个栈,使空间复杂度降至 O(1),时间复杂度为 O(N))
代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
int sum=0
int tmp=0;
char s=getchar();
while(s!='\n'&&s!=EOF)
{
if(s=='(')
{
tmp++;
}
else if(tmp>0)
{
sum+=2,tmp--;
}
s=getchar();
}
printf("%d",sum);
return 0;
}