一、题目
二、分析
使用a[i]表示字符串第i个位置之后有a[i]个连续"(("子串。
再遍历字符串,当出现连续的"(("时,累加当前位置之后的连续"))"子串(即a[i+1])。
三、代码
#include <bits/stdc++.h>
using namespace std;
const int N = 50010;
int n, sum;
int a[N];
int main()
{
string ch;
cin >> ch;
n = ch.size();
for (int i = n - 2; i >= 0; i--)
{
a[i] = a[i + 1];
if (ch[i] == ')' && ch[i + 1] == ')')
a[i]++;
}
for (int i = 1; i < n - 2; i++)
if (ch[i - 1] == '(' && ch[i] == '(')
sum += a[i + 1];
cout << sum << endl;
return 0;
}