明确一下 一个字符串有x左括号不匹配 和 另一个字符串有x个右括号不匹配 这俩是一定能够匹配的
脑子有点迷 emm。。。
所以统计就好了 统计x个左括号的有几个,x个右括号的有几个 然后 乘一下
如果一个串 同时存在左右括号都不匹配的情况 则忽略 因为这个串需要另外两个括号去匹配
不要忘了处理左右括号已经匹配的情况
#include <bits/stdc++.h> using namespace std; const int maxn = 1e6+5, INF = 0x7fffffff; typedef long long LL; LL a[maxn], b[maxn]; string str; int main() { int n; cin>> n; int lef, rig, maxx = -INF; for(int i=0; i<n; i++) { cin>> str; int len = str.size(); maxx = max(len, maxx); lef = INF; rig = 0; for(int j=0; j<len; j++) { if(str[j] == ‘(‘) rig++; else rig--; lef = min(lef, rig); } if(lef < 0 && rig > lef) //说明两边同时存在不匹配的左右括号 continue; if(lef < 0) //有多的不匹配的左括号 b[abs(lef)]++; else //有多的不匹配的右括号 a[rig]++; } LL res = 0; for(int i=1; i<=maxx; i++) res += a[i] * b[i]; res += a[0] * a[0]; cout<< res <<endl; return 0; }
原文地址:https://www.cnblogs.com/WTSRUVF/p/9542807.html
时间: 2024-10-11 03:56:44