作者:书友53034809 | 来源:互联网 | 2023-01-28 12:35
括号匹配
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 110 Accepted Submission(s) : 46
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
Input
第一行输入一个正整数N,表示测试数据组数(N<=100)。
每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100。
Output
对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行。
Sample Input
Sample Output
Source
CodingTrip - 携程编程大赛 (预赛第一场)
代码:
#include
#include
#include
#include
#include
using namespace std;
const int maxn=250;
const int inf=0x7fffffff;
char str[maxn];
int dp[maxn][maxn],ps[maxn][maxn];
//dp[i][j]代表串从i到j需要添加几个字符才能合法,ps[i][j],记录的从i到j在哪里断成两部分
int len;
int main()
{
int k;cin>>k;
while(k--)
{
cin>>str;
len=strlen(str);
memset(dp,0,sizeof(dp));
for(int i=0;i(dp[i][mid]+dp[mid+1][j]))
{
dp[i][j]=dp[i][mid]+dp[mid+1][j];
ps[i][j]=mid;//mid为串i到j区间断开的位置
}
}
}
cout<