题目描述:
给你一个长度为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:寻找最长合法括号序列相关推荐

  1. 【字符串2】(删除公共字符、合法括号序列判断、两种排序方法、密码强度等级)

    字符串题集 1. 删除公共字符 题目描述 题目分析 C++代码 2. 合法括号序列判断 题目描述 题目分析 C++代码 3. 两种排序方法 题目描述 题目分析 C++代码 4. 密码强度等级 题目描述 ...

  2. 最长合法括号子序列(括号序列+贪心)

    1.题目引入: 一个合法的括号序列满足以下条件: 序列()被认为是合法的. 如果序列X与Y是合法的,则XY也被认为是合法的. 如果序列X是合法的,则(X)也是合法的. 例如,(),()(),(())这 ...

  3. Leetcode 32 最长合法括号子序列

    算法特辑–动态规划 Leetcode 32 最长合法括号子序列 给定只有"(" 和 ")" 的字符串,求出最长的合法括号子序列. 例如:"())&qu ...

  4. 编程题——合法括号序列

    编程题--合法括号序列 题目描述: 对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串. 给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串. 示例1: 输入 ( ...

  5. 牛客网--关于合法括号序列判断

    牛客网--关于合法括号序列判断 题目描述 代码 题目描述 对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串. 给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串 ...

  6. 刷题日记【第四篇】-笔试必刷题【Fibonacci数列+合法括号序列判断+两种排序方法+求最小公倍数】

    目录 选择题模块 1. 以下对继承的描述错误的是(A) 2. 在Java中,一个类(B) 3. 以下不是Object 类的方法的是(D) 4. Test.main() 函数执行后的输出是(D) 编程题 ...

  7. [Jobdu] 题目1530:最长不重复子串

    题目描述: 最长不重复子串就是从一个字符串中找到一个连续子串,该子串中任何两个字符都不能相同,且该子串的长度是最大的. 输入: 输入包含多个测试用例,每组测试用例输入一行由小写英文字符a,b,c... ...

  8. [ Nowcoder Contest 165 #D ] 合法括号序列

    \(\\\) \(Description\) 键盘上有三个键,敲击效果分别是: 在输出序列尾部添加一个左括号 在输出序列尾部添加一个右括号 删除输出序列尾部的第一个元素,若输出序列为空,则什么都不发生 ...

  9. leetcode python 032 识别最长合法括号

    # 给定一个只包含字符'('和')'的字符串, # 找到最长的有效(格式良好)括号子字符串的长度. # 对于"(()",最长的有效括号子串是"()",其长度为2 ...

最新文章

  1. 走进元学习:概述不同类型的元学习方法
  2. poj 2454 Jersey Politics 随机化
  3. 37.操作系统的信号量
  4. 【Python】 Spyder
  5. 收藏:Asp.net中基于Forms验证的角色验证授权
  6. python windows和linux路径_python复制文件,路径不存在问题(Windows和linux路径分隔符不统一)...
  7. 链式队列的基本操作(入队、出队、遍历队列、清空队列)
  8. Git submodule子模块
  9. java接口常见问题分析_常见问题 - Apache ServiceComb
  10. ListView执行notifyDatasetChanged无数据显示,getView未执行
  11. VSCode 中使用Git实践,学会了效率翻倍
  12. 学python能赚钱吗-做直播能有多赚钱,Python告诉你
  13. java返回页面顶部代码_js返回顶部
  14. Apple_Mail 登录163邮箱账号
  15. 使用YOOtheme Pro加速您的WordPress网站
  16. excel表格打不开是什么原因_Excel表格批量隔行插入N行的方法是什么
  17. Vue实现图形化积木式编程(十三)
  18. 3825. 逃离大森林
  19. 组装电脑千万不要随便买
  20. 最近看的电影综艺推荐

热门文章

  1. Spring 基于Java的Bean声明
  2. vue --- 从模块从父元素获取数据
  3. Day03:文件打开;错误处理
  4. Python3.5以上版本lxml导入etree报错Unresolved reference
  5. 需求分析挑战之旅(疯狂的订餐系统)(8)——最后的疯狂
  6. 监控工具之zabbix server3.4 部署配置
  7. jQuery插件-轻量图片轮换-UISlide2
  8. nginx php-fpm 输出php错误日志(转)
  9. Bootstrap3 排版-改变大小写
  10. HoloLens开发手记 - Unity之Tracking loss