每次匹配上一个,当前位置能匹配的括号数应该是左括号减一位置的括号数+1;
代码一看就懂,还自带stack函数,省的数组模拟了。
#include <bits\stdc++.h>
using namespace std;
char s[1100009];
long long num[1100009];
stack<int>q;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
int len=strlen(s);
long long ans=0;
while(!q.empty())q.pop();
for(int i=0;i<len;i++)
{
num[i]=0;
if(s[i]=='(')q.push(i);
else
{
if(q.empty())continue;
ans+=num[q.top()-1]+1;
num[i]=num[q.top()-1]+1;
q.pop();
}
}
printf("%lld\n",ans);
}
return 0;
}