[Jobdu] 题目1337:寻找最长合法括号序列
2014-08-08 15:43
232 查看
题目描述:
给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配;所有的右括号都有唯一的左括号匹配。例如:((()))()()便是一个长度为10的合法括号序列,而(()))( 则不是。
需要你求解的是,找出最长的合法括号子序列的长度,同时找出具有这样长度的序列个数。
输入:
测试数据包括多个,每个测试数据包含两行:
第一行为一个整数N,其中N不会超过10^6。
第二行为一个长度为N的字符串,这个字符串由左括号'('和右括号')'组成。
输出:对应每个测试案例,输出一行,其中包含两个整数,分别代表最长合法括号序列的长度和个数,中间由空格隔开。若没有合法的子序列存在,则返回0 1。样例输入:
样例输出:
用一个bool型的数组来标记匹配情况。
给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配;所有的右括号都有唯一的左括号匹配。例如:((()))()()便是一个长度为10的合法括号序列,而(()))( 则不是。
需要你求解的是,找出最长的合法括号子序列的长度,同时找出具有这样长度的序列个数。
输入:
测试数据包括多个,每个测试数据包含两行:
第一行为一个整数N,其中N不会超过10^6。
第二行为一个长度为N的字符串,这个字符串由左括号'('和右括号')'组成。
输出:对应每个测试案例,输出一行,其中包含两个整数,分别代表最长合法括号序列的长度和个数,中间由空格隔开。若没有合法的子序列存在,则返回0 1。样例输入:
6 (())() 3 ))(
样例输出:
6 1 0 1
用一个bool型的数组来标记匹配情况。
#include <iostream> #include <stack> #include <string> #include <cstring> using namespace std; int n; string s; void getRes() { bool a[s.length()]; memset(a, false, s.length()); stack<int> st; for (int i = 0; i < s.length(); ++i) { if (s[i] == '(') { st.push(i); } else { if (!st.empty()) { a[i] = true; a[st.top()] = true; st.pop(); } } } int max = 0, cnt = 1, tmp = 0; for (int i = 0; i < s.length(); ++i) { if (a[i]) { ++tmp; } else { tmp = 0; } if (max == tmp && max != 0) { ++cnt; } else if (max < tmp) { max = tmp; cnt = 1; } } cout << max << " " << cnt << endl; } int main() { while (cin >> n) { cin >> s; getRes(); } return 0; } /************************************************************** Problem: 1337 User: hupo250 Language: C++ Result: Accepted Time:310 ms Memory:7604 kb ****************************************************************/
相关文章推荐
- 【九度】题目1337:寻找最长合法括号序列
- 九度 题目1337:寻找最长合法括号序列
- 九度 题目1342:寻找最长合法括号序列II(25分)
- 九度题目1342:寻找最长合法括号序列II
- 九度OJ 1337:寻找最长合法括号序列 (DP)
- 九度OJ 1337:寻找最长合法括号序列 (DP)
- 【九度】题目1342:寻找最长合法括号序列II(25分)
- 九度笔记之 1337:寻找最长合法括号序列
- 九度 1337 寻找最长合法括号序列
- 九度 1342 寻找最长合法括号序列II
- 寻找最长合法括号序列九度0J
- 51nod 1478 括号序列的最长合法子段(栈-括号匹配寻找最长合法子串长度及其个数)
- 九度OJ 1342:寻找最长合法括号序列II (DP)
- 九度OJ 1342:寻找最长合法括号序列II (DP)
- 九度笔记之 1342:寻找最长合法括号序列II(25分)-给括号当红娘,解决最长合法字符串问题
- 【LeetCode题目记录-12】所有合法的括号序列
- 算法题目二:寻找最长重复子序列(1) trie树
- 算法题目二:寻找最长重复子序列(2) trie树与后缀树的应用
- 算法题目二:寻找最长重复子序列(3) 后缀树
- 算法题目二:寻找最长重复子序列(4) 求给定字符串重复最长的子串