九度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的数据管理员,每一周的题目录入都让其很抓狂,因为题目不是他出的,他控制不了出题的速度……在等题目的时候,阳仔又不敢出去打篮球,所以只能在纸上乱涂乱写,这天,阳仔在纸上写下了这样 ...
随机推荐
- windows curl命令
一.概述 Curl命令可以通过命令行的方式,执行Http请求.在Elasticsearch中有使用的场景,因此这里研究下如何在windows下执行curl命令 二.下载 下载地址:https://cu ...
- 2017.4.7 java异常处理总结
目录 1.java异常处理的几种错误做法 2.异常处理示例 3.常用异常 4.异常类的继承关系 5.异常处理机制 6.Throw和Throws的区别 7.e.toString(), e.getCaus ...
- [PWA] Add Push Notifications to a PWA with React in Chrome and on Android
On Android and in Chrome (but not on iOS), it's possible to send push notifications with a PWA. We'l ...
- 新Android工程src和layout目录为空的问题
问题症状:eclipse创建的新Android工程,发现src下为空,res\layout目录下也为空. 原因:升级了SDK,新版本sdk与ADT冲突.具体冲突的版本号为ADT 23.X与SDK22. ...
- mysql 修复
/home/wkubuntu/mysql/data/iZ25sgya7raZbak.pid pid 文件notfond 错误解决 一.截图 snipingtool skip-locking 修改成 ...
- first core data
// // TableViewController.swift // TestCoreData // // import CoreData import UIKit class TableViewCo ...
- Jmeter3.0-多维度的图形化HTML报告
本文转载于推酷:http://www.tuicool.com/articles/BNvuEzr 在JMeter3.0之前,官方只提供在工具的UI上对测试结果部分维度的图形化展示,这对我带来了两方面的困 ...
- ylb:使用sql语句实现添加、删除约束
ylbtech-SQL Server:SQL Server-使用sql语句实现添加.删除约束 --主键约束(Primary Key constraint):要求主键列的数据唯一,并且不允许为空. -- ...
- the reactor pattern and java nio
在<java NIO>作者PPT<How to Build a Scalable Multiplexed Server With NIO> 和 Doug Lea <Sca ...
- https 加载问题
https的网站,加载的资源要全部https,如果里面有http的资源,很多浏览器是加载不进来 要地址栏变绿,网站内部全部引用都是https的