九度OJ 1337:寻找最长合法括号序列 (DP)
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:839
解决:179
- 题目描述:
-
给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配;所有的右括号都有唯一的左括号匹配。例如:((()))()()便是一个长度为10的合法括号序列,而(()))( 则不是。需要你求解的是,找出最长的合法括号子序列的长度,同时找出具有这样长度的序列个数。
- 输入:
-
测试数据包括多个,每个测试数据包含两行:第一行为一个整数N,其中N不会超过10^6。第二行为一个长度为N的字符串,这个字符串由左括号'('和右括号')'组成。
- 输出:
- 对应每个测试案例,输出一行,其中包含两个整数,分别代表最长合法括号序列的长度和个数,中间由空格隔开。若没有合法的子序列存在,则返回0 1。
- 样例输入:
-
6
(())()
3
))(
- 样例输出:
-
6 1
0 1
思路:
目前自己还没做出来,先上别人写的代码,过段时间会更新成自己写的代码。
别人算法的分析:
红色区域表示已经得到的合法括号序列。
如上图,分别计算以第i个符号为结尾的最长合法括号序列长度,保存在maxLen[i]中
在位置pos时,如果该位置为‘(’,显然maxLen[pos]=0;
如果该位置为')', 我们已经得到了pos-1位置的最长合法括号序列,我们判断以pos-1
位置为结尾的最长合法括号序列的左边位置sympos上的符号是否为'(',
如果sympos位置上为‘(’,如图中第2步所示,则以Pos为结尾的最长合法括号序列是以pos-1位置为结果的最长合法括号序列加上sympos上的符号‘(’和pos上的符号‘)’而成,如图第3步。
接下来还要再加上以sympos-1为结尾的最长合法括号序列,构成最终的合法括号序列。如图第4步。
另外一个 最长合法括号序列题,不过解决算法相差很大 。九度笔记之
1342:寻找最长合法括号序列II
代码:
#include <iostream>
#include <string>
using namespace std;
void getMaxLen(std::string &s){
std::string::size_type len = s.size();
std::string::size_type pos = 0;
int *maxLen = new int[len]; //maxLen end at pos
maxLen[0] = 0;
int ml = 0;
int ns = 0;
for(pos = 1;pos<len;pos++){
if(s.at(pos)=='(' )
maxLen[pos]=0;
else{
int sympos = pos-1 - maxLen[pos-1];//can't use size_type becase it's unsigned if
//pos-1 < maxLen[pos-1] sympos will be 0xffffffff
if(sympos<0 || s.at(sympos)==')'){
maxLen[pos]=0;
}else{
maxLen[pos] = maxLen[pos-1]+2;// add () before
if(sympos>0){
maxLen[pos]+=maxLen[sympos-1];
} if(maxLen[pos]>ml){
ml = maxLen[pos];
ns = 1;
}else if(maxLen[pos]==ml){
ns++;
}
}
}// else if(s.at(pos)=='(')
}//for
if(ml>0)
std::cout<<ml<<" "<<ns<<std::endl;
else
std::cout<<0<<" "<<1<<std::endl;
} void judo(){
int n;
std::string s;
while(std::cin>>n>>s){
getMaxLen(s);
}
}
void test(){
std::string s= "())";
getMaxLen(s);
}
int main() {
//test();
judo();
//cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
/**************************************************************
Problem: 1337
User: KES
Language: C++
Result: Accepted
Time:300 ms
Memory:6452 kb
****************************************************************/
红色区域表示已经得到的合法括号序列。
如上图,分别计算以第i个符号为结尾的最长合法括号序列长度,保存在maxLen[i]中
在位置pos时,如果该位置为‘(’,显然maxLen[pos]=0;
如果该位置为')', 我们已经得到了pos-1位置的最长合法括号序列,我们判断以pos-1
位置为结尾的最长合法括号序列的左边位置sympos上的符号是否为'(',
如果sympos位置上为‘(’,如图中第2步所示,则以Pos为结尾的最长合法括号序列是以pos-1位置为结果的最长合法括号序列加上sympos上的符号‘(’和pos上的符号‘)’而成,如图第3步。
接下来还要再加上以sympos-1为结尾的最长合法括号序列,构成最终的合法括号序列。如图第4步。
另外一个 最长合法括号序列题,不过解决算法相差很大 。九度笔记之
1342:寻找最长合法括号序列II
九度OJ 1337:寻找最长合法括号序列 (DP)的更多相关文章
- 九度oj题目1342:寻找最长合法括号序列II
题目1342:寻找最长合法括号序列II(25分) 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:886 解决:361 题目描述: 假如给你一个由’(‘和’)’组成的一个随机的括号序列,当然 ...
- 九度oj 题目1337:寻找最长合法括号序列
题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的 ...
- 九度OJ 1342:寻找最长合法括号序列II (DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:898 解决:366 题目描述: 假如给你一个由'('和')'组成的一个随机的括号序列,当然,这个括号序列肯定不能保证是左右括号匹配的,所以给 ...
- 九度oj 题目1342:寻找最长合法括号序列II
题目描述: 假如给你一个由’(‘和’)’组成的一个随机的括号序列,当然,这个括号序列肯定不能保证是左右括号匹配的,所以给你的任务便是去掉其中的一些括号,使得剩下的括号序列能够左右括号匹配且长度最长,即 ...
- [Jobdu] 题目1337:寻找最长合法括号序列
题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的 ...
- 九度OJ 1214 寻找丑数【算法】
题目地址:http://ac.jobdu.com/problem.php?pid=1214 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因 ...
- 九度oj 1034 寻找大富翁 2009年浙江大学计算机及软件工程研究生机试真题
题目1034:寻找大富翁 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5323 解决:2123 题目描述: 浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁. 输入: ...
- 九度OJ 1195:最长&最短文本 (搜索)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3144 解决:1156 题目描述: 输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输 ...
- 九度oj 题目1357:疯狂地Jobdu序列
题目描述: 阳仔作为OJ的数据管理员,每一周的题目录入都让其很抓狂,因为题目不是他出的,他控制不了出题的速度……在等题目的时候,阳仔又不敢出去打篮球,所以只能在纸上乱涂乱写,这天,阳仔在纸上写下了这样 ...
随机推荐
- ElasticSearch的按日期排序问题
ES中有一个sort域,类型为date,格式是: yyyy-MM-dd HH:mm:ss 但是,在实际应用中,想仅仅按yyyy-MM-dd排序.我的处理过程是,用es的script,提取出日期,然后按 ...
- CentOS7.4 x64环境Percona-Server-5.6安装
CentOS7.4 x64环境Percona-Server-5.6安装 下载MySQL $ cd /usr/local/src/ $ wget https://www.percona.com/down ...
- bind域名dns解析及主从服务的配置
bind域名dns解析及主从服务的配置 1.dns解析介绍 人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是多对一的关系,一个ip地址不一定只对应一个域名,且一个域名只可以对应 ...
- 转: java语法与ide级入门介绍 from: IBM dev
点评: 讲的比较初级,但是有教你使用ide (Eclipse) frrom:http://www.ibm.com/developerworks/java/tutorials/j-introtojava ...
- hdu 5284 wyh2000 and a string problem(没有算法,仅仅考思维,字符数组得开20万,不然太小了)
代码: #include<cstdio> #include<cstring> using namespace std; char s[200000]; int main() { ...
- Win7如何安装IIS来浏览ASP网站
1 进入控制面板-->程序与功能-->点击左侧的"打开或关闭Windows功能"-->把"Internet信息服务"给勾上,点击"确 ...
- scrapy 安装详解
一. Scrapy简介 Scrapy is a fast high-level screen scraping and web crawling framework, used to crawl we ...
- C中的C文件与h文件辨析
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 .编译阶段,首先编译成纯 ...
- 【BIEE】08_修改浏览器标题栏显示内容
打开分析,我们可以看到标题栏中显示的BIEE默认的,现在想要把这个修改为自定义的 打开文件路径: D:\obiee\Oracle_BI1\bifoundation\web\msgdb\l_zh-CN\ ...
- jmeter压测-负载配置
jmeter 压测 一般压测的时间是10-15分钟 TPS:服务端每秒钟处理的请求数 越大越好 响应时间 :越短越好 并发用户数 也就是多少并发 指标给你:tps要达到多少 响应时间要达到多少 并 ...