https://vjudge.net/contest/242769#problem/H
题目大意:左括号和右括号数量相等的个数;
思路:从开始枚举,用两个标记指针,一个记录左括号和右括号的数量,出现一个左括号++出现一个右括号--,出现一个?号的话我们先把它当成右括号 所以 左括号 -- 但是问号也要记录下来 所以问号++,当 左括号的数量为零的时候说明左括号和右括号的数量相等,所以答案加1,但是如果左括号的数量小于0的时候,就要把问好变成左括号来平衡数量,所以左括号+2因为右括号少了一个 左边++左括号多了一个左边++,问号--。
代码:
#include<bits/stdc++.h>
using namespace std;int main()
{
string s1;
cin >> s1;
int sum = 0;
for(int i = 0; i <s1.size(); i++){
int l = 0,m = 0;
for(int j = i; j < s1.size(); j++){
if(s1[j] == '('){
l++;
}
else if(s1[j] == ')'){
l--;
}
else if(s1[j] == '?'){
l--;
m++;
}
if(l == 0) sum ++;
else if(l < 0){
if(m == 0) break;
if(m>0){
l+=2;
m--;
}
}
}
}
printf("%d\n",sum);
}