博客
关于我
括号匹配(二)(动态规划)
阅读量: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/

你可能感兴趣的文章
ACM DP Partitioning by Palindromes
查看>>
HDU 1045 Fire Net 二分图最大匹配
查看>>
TiKV 源码解析系列文章(十三)MVCC 数据读取
查看>>
如何做到 10T 集群数据安全备份、1GB/s 快速恢复?
查看>>
TiDB 源码阅读系列文章(十三)索引范围计算简介
查看>>
TiDB 源码阅读系列文章(十六)INSERT 语句详解
查看>>
TBSSQL 的那些事 | TiDB Hackathon 2018 优秀项目分享
查看>>
PingCAP 校园招聘 2020 正式启动!
查看>>
Java基础11-File类、递归
查看>>
【面试题】Java中创建对象的方式有几种?
查看>>
1900分图论 : 1183E1 LCA + Kruskal
查看>>
逆序数
查看>>
(建议收藏)计算机网络:传输层概述、UDP协议与可靠传输协议习题解析与拓展
查看>>
【NvRAM】apk中中读写nvram
查看>>
Android 开发常用的工具类(更新ing)
查看>>
Android HUAWEI 使用安装包安装App时系统提示:文件打开失败
查看>>
判断浏览器是否为 IE11
查看>>
使用Sass
查看>>
web前端知识(04html的表单)
查看>>
如何理解熵
查看>>