题意:给一段左右小、中括号串,求出这一串中最多有多少匹配的括号。

解法:此问题具有最优子结构,dp[i][j]表示i~j中最多匹配的括号,显然如果i,j是匹配的,那么dp[i][j] = dp[i+1][j-1]+2;

否则我们可以分区间取最值。dp[i][j] = max(dp[i][j],dp[i][k]+dp[k+1][j]); k在i,j之间。

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
using namespace std; class Solution {
public:
int longestValidParentheses(string s) {
int n = s.length();
vector<vector<int> > dp(n+);
for(int i=;i<n;i++)
for(int j=;j<n;j++)
dp[i].push_back();
for(int len=;len<=n;len++) {
for(int i=,j;i<=n-len;i++) {
j=i+len-;
if((s[i] == '(' && s[j] == ')') || (s[i] == '[' && s[j] == ']'))
dp[i][j] = max(dp[i][j],dp[i+][j-]+);
for(int k=i;k<j;k++)
dp[i][j] = max(dp[i][j],dp[i][k]+dp[k+][j]);
}
}
return dp[][n-];
}
}; int main()
{
Solution a;
string s;
while(cin>>s) {
if(s == "end") break;
cout<<a.longestValidParentheses(s)<<endl;
}
return ;
}

最新文章

  1. Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
  2. .Net 中的反射(动态创建类型实例) - Part.4
  3. 3098: Hash Killer II
  4. nmap端口状态解析
  5. Objective-C中NSValue的使用
  6. hdu 1532 Dinic模板(小白书)
  7. JAVA MemCache 史无前例的详细讲解【转】
  8. Java Apcahe的HTTPClient工具Http请求当请求超时重发
  9. GroupLayout 布局
  10. More lumber is required
  11. mysql的perror
  12. ubuntu 引导删除
  13. 关于echarts使用的各种问题
  14. Hibernate学习笔记二
  15. PEM routines:PEM_read_bio:no start line
  16. WebApp开发技术搭配
  17. 基本入门ISD9160开发指南
  18. read progress
  19. php 获取图片base64编码格式数据
  20. 我读《从Paxos到zookeeper分布式一致性原理与实践》

热门文章

  1. [WCF编程]12.事务:服务事务编程(下)
  2. [连载]《C#通讯(串口和网络)框架的设计与实现》- 5.串口和网络统一IO设计
  3. [C/C++] DebugBreak
  4. 1-7 basket.js localstorage.js缓存css、js
  5. [Android]Google 开源的 Android 排版库:FlexboxLayout
  6. iOS MJRefresh设置MJRefreshStateNoMoreData状态图片
  7. 来自沪江、滴滴、蘑菇街架构师的 Docker 实践分享
  8. 又一个高性能轻量级的iOS模型框架YYModel
  9. 记录一次Quartz2D学习(一)
  10. Android 高级面试题及答案