博客
关于我
括号匹配(二)(动态规划)
阅读量:614 次
发布时间:2019-03-13

本文共 1534 字,大约阅读时间需要 5 分钟。

 

括号匹配(二)

时间限制:
1000 ms  |  内存限制:65535 KB
难度:
6
 
描述
给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
 
输入
第一行输入一个正整数N,表示测试数据组数(N<=10)
每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100
输出
对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行
样例输入
4[]([])[]((]([)]
样例输出
0032
题解:类似与区间dp;
代码:
1 #include
2 #include
3 using namespace std; 4 string str; 5 int dp[111][111]; 6 int main(){ 7 int N; 8 cin>>N; 9 while(N--){10 str.clear();11 cin>>str;12 for(int i=0;i
=0;j--){15 dp[j][i]=dp[j][i-1]+1;16 for(int k=j;k

刚开始用栈写的,没考虑清楚,果断错了;

代码:例如【))】

1 #include
2 #include
3 #include
4 using namespace std; 5 char s[110]; 6 int main(){ 7 int N,tot; 8 scanf("%d",&N); 9 while(N--){map
mp;10 stack
sign;11 tot=0;12 mp['(']=1;mp[')']=-1;13 mp['[']=2;mp[']']=-2;14 scanf("%s",s);15 for(int i=0;s[i];i++){16 if(mp[s[i]]>0)sign.push(s[i]);17 else{18 if(!sign.empty()){19 if(mp[sign.top()]+mp[s[i]]==0)sign.pop();20 else tot++;21 }22 else tot++;23 }24 }25 while(!sign.empty()){26 sign.pop();27 tot++;28 }29 printf("%d\n",tot);30 }31 return 0;}

 

转载地址:http://eehaz.baihongyu.com/

你可能感兴趣的文章
计算机网络--大厂常见问题(2)
查看>>
cookie、session、token
查看>>
IDEA-@Slf4j和log标签&@Data(Lombok)无效
查看>>
SpringCloud-Eureka报错 Error creating bean with name解决
查看>>
Thymeleaf 生成下标,索引,使用Stat变量
查看>>
LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
查看>>
全局变量初始化顺序的不确定性引发的bug
查看>>
java基础避坑(二)——基础数据类型short
查看>>
EOS交易离线签名PHP代码
查看>>
i7 9750h和r5 3550h 哪个好
查看>>
i9 11900H和i7 10875h 选哪个
查看>>
java工程实现简单Storm--统计字符串频率
查看>>
Ubuntu文件校验MD5
查看>>
windows环境tomcat8配置Solr5.5.1
查看>>
SpringMVC Hello World
查看>>
ValueError: Unexpected end of file.
查看>>
基于SpringMVC+Spring+MyBatis实现秒杀系统【客户端交互】
查看>>
webpack-相关报错-持续更新
查看>>
基于ios系统的ionic一些奇葩错误
查看>>
六、登录(二)
查看>>