[Jobdu] 题目1337:寻找最长合法括号序列
- 题目描述:
-
给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配;所有的右括号都有唯一的左括号匹配。例如:((()))()()便是一个长度为10的合法括号序列,而(()))( 则不是。需要你求解的是,找出最长的合法括号子序列的长度,同时找出具有这样长度的序列个数。
- 输入:
-
测试数据包括多个,每个测试数据包含两行:第一行为一个整数N,其中N不会超过10^6。第二行为一个长度为N的字符串,这个字符串由左括号'('和右括号')'组成。
- 输出:
- 对应每个测试案例,输出一行,其中包含两个整数,分别代表最长合法括号序列的长度和个数,中间由空格隔开。若没有合法的子序列存在,则返回0 1。
- 样例输入:
-
6 (())() 3 ))(
- 样例输出:
-
6 1 0 1
用一个bool型的数组来标记匹配情况。
1 #include <iostream> 2 #include <stack> 3 #include <string> 4 #include <cstring> 5 using namespace std; 6 7 int n; 8 string s; 9 10 void getRes() { 11 bool a[s.length()]; 12 memset(a, false, s.length()); 13 stack<int> st; 14 for (int i = 0; i < s.length(); ++i) { 15 if (s[i] == '(') { 16 st.push(i); 17 } else { 18 if (!st.empty()) { 19 a[i] = true; 20 a[st.top()] = true; 21 st.pop(); 22 } 23 } 24 } 25 26 int max = 0, cnt = 1, tmp = 0; 27 for (int i = 0; i < s.length(); ++i) { 28 if (a[i]) { 29 ++tmp; 30 } else { 31 tmp = 0; 32 } 33 if (max == tmp && max != 0) { 34 ++cnt; 35 } else if (max < tmp) { 36 max = tmp; 37 cnt = 1; 38 } 39 } 40 cout << max << " " << cnt << endl; 41 } 42 43 int main() { 44 while (cin >> n) { 45 cin >> s; 46 getRes(); 47 } 48 return 0; 49 } 50 51 /************************************************************** 52 Problem: 1337 53 User: hupo250 54 Language: C++ 55 Result: Accepted 56 Time:310 ms 57 Memory:7604 kb 58 ****************************************************************/
转载于:https://www.cnblogs.com/easonliu/p/3899543.html
[Jobdu] 题目1337:寻找最长合法括号序列相关推荐
- 【字符串2】(删除公共字符、合法括号序列判断、两种排序方法、密码强度等级)
字符串题集 1. 删除公共字符 题目描述 题目分析 C++代码 2. 合法括号序列判断 题目描述 题目分析 C++代码 3. 两种排序方法 题目描述 题目分析 C++代码 4. 密码强度等级 题目描述 ...
- 最长合法括号子序列(括号序列+贪心)
1.题目引入: 一个合法的括号序列满足以下条件: 序列()被认为是合法的. 如果序列X与Y是合法的,则XY也被认为是合法的. 如果序列X是合法的,则(X)也是合法的. 例如,(),()(),(())这 ...
- Leetcode 32 最长合法括号子序列
算法特辑–动态规划 Leetcode 32 最长合法括号子序列 给定只有"(" 和 ")" 的字符串,求出最长的合法括号子序列. 例如:"())&qu ...
- 编程题——合法括号序列
编程题--合法括号序列 题目描述: 对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串. 给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串. 示例1: 输入 ( ...
- 牛客网--关于合法括号序列判断
牛客网--关于合法括号序列判断 题目描述 代码 题目描述 对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串. 给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串 ...
- 刷题日记【第四篇】-笔试必刷题【Fibonacci数列+合法括号序列判断+两种排序方法+求最小公倍数】
目录 选择题模块 1. 以下对继承的描述错误的是(A) 2. 在Java中,一个类(B) 3. 以下不是Object 类的方法的是(D) 4. Test.main() 函数执行后的输出是(D) 编程题 ...
- [Jobdu] 题目1530:最长不重复子串
题目描述: 最长不重复子串就是从一个字符串中找到一个连续子串,该子串中任何两个字符都不能相同,且该子串的长度是最大的. 输入: 输入包含多个测试用例,每组测试用例输入一行由小写英文字符a,b,c... ...
- [ Nowcoder Contest 165 #D ] 合法括号序列
\(\\\) \(Description\) 键盘上有三个键,敲击效果分别是: 在输出序列尾部添加一个左括号 在输出序列尾部添加一个右括号 删除输出序列尾部的第一个元素,若输出序列为空,则什么都不发生 ...
- leetcode python 032 识别最长合法括号
# 给定一个只包含字符'('和')'的字符串, # 找到最长的有效(格式良好)括号子字符串的长度. # 对于"(()",最长的有效括号子串是"()",其长度为2 ...
最新文章
- 走进元学习:概述不同类型的元学习方法
- poj 2454 Jersey Politics 随机化
- 37.操作系统的信号量
- 【Python】 Spyder
- 收藏:Asp.net中基于Forms验证的角色验证授权
- python windows和linux路径_python复制文件,路径不存在问题(Windows和linux路径分隔符不统一)...
- 链式队列的基本操作(入队、出队、遍历队列、清空队列)
- Git submodule子模块
- java接口常见问题分析_常见问题 - Apache ServiceComb
- ListView执行notifyDatasetChanged无数据显示,getView未执行
- VSCode 中使用Git实践,学会了效率翻倍
- 学python能赚钱吗-做直播能有多赚钱,Python告诉你
- java返回页面顶部代码_js返回顶部
- Apple_Mail 登录163邮箱账号
- 使用YOOtheme Pro加速您的WordPress网站
- excel表格打不开是什么原因_Excel表格批量隔行插入N行的方法是什么
- Vue实现图形化积木式编程(十三)
- 3825. 逃离大森林
- 组装电脑千万不要随便买
- 最近看的电影综艺推荐