喵哈哈村的括号序列

Posted #忘乎所以#

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了喵哈哈村的括号序列相关的知识,希望对你有一定的参考价值。

喵哈哈村的括号序列

发布时间: 2017年2月21日 20:05   最后更新: 2017年2月21日 20:07   时间限制: 1000ms   内存限制: 128M

喵哈哈村的括号序列和外界的括号序列实际上是一样的。

众所周知"()"这样的,就是一个标准的括号序列;"()()()()"这样也是括号序列;“((()))()”这样也是一个合法的括号序列。但是"((("这样,就不是一个合法的括号序列了。

现在沈宝宝非常好奇,给你一个字符串,请从中找出最长的合法括号序列出来。

不知道你能找到吗?

第一行一个T,表示有T组数据。
接下来T行,每一行都是一个字符串。
保证字符串的长度小于100000。
而且字符串中保证只会出现"(",")"这两种字符之一。
1<=T<=10

对于每一组测试数据,输出最长的合法括号序列的长度。

复制
2
)((())))(()())
)(
6
0
用个stack就行了,注意一些特殊情况。
 1 #include <iostream>
 2 #include <string.h>
 3 #include <stack>
 4 #include <stdio.h>
 5 #define N 100005
 6 using namespace std;
 7 char k[N];
 8 int ans[N];
 9 int main(){
10     int n;
11     cin>>n;
12     while(n--){
13         memset(k,0,sizeof(k));
14         memset(ans,0, sizeof(ans));
15         cin>>k;
16         stack<int> s;
17         int len=strlen(k),it=0,Max=0,cnt=0;
18         for(int i=0;i<len;i++){
19             if(k[i]==()
20                 s.push(i);
21             if(k[i]==)&&!s.empty()){
22                 ans[s.top()]=1;
23                 ans[i]=1;
24                 s.pop();
25             }
26         }
27         for(int i=0;i<len;i++){
28             if(ans[i]==1){
29                 cnt++;
30             }
31 
32             if(cnt&&ans[i]==0){
33                 Max=max(Max,cnt);
34                 cnt=0;
35             }
36 
37             if(i==len-1)
38                 Max=max(Max,cnt);
39         }
40         cout<<Max<<endl;
41     }
42     return 0;
43 }

 

 

以上是关于喵哈哈村的括号序列的主要内容,如果未能解决你的问题,请参考以下文章

喵哈哈村的代码传说 1——4

喵哈哈村的代码传说 第三章 宽度优先搜索

喵哈哈村的代码传说 第一章 冒泡排序

喵哈哈村的代码传说 第四章 并查集

喵哈哈村的代码传说 第四章 并查集

喵哈哈村的代码传说 第四章 并查集