1478 括号序列的最长合法子段

来源:互联网 发布:微信跳淘宝 编辑:程序博客网 时间:2024/05/22 03:47

感觉自己宛如一个智障。。。

维护一个栈,dp保证相邻的合法括号能够相连接,就好了。

#include<bits/stdc++.h>using namespace std;const int MAXN=1001000;char s[MAXN];int dp[MAXN];stack<int> stk;int main(){int len,i,ans,sum,tmp;while(scanf("%s",&s)!=EOF){len=strlen(s);memset(dp,0,sizeof(dp));while(!stk.empty())stk.pop();ans=0;for(i=0;i<len;i++){if(s[i]=='(')stk.push(i);else if(!stk.empty()){tmp=stk.top();stk.pop();dp[i]=dp[tmp-1]+i-tmp+1;if(dp[i]>ans){ans=dp[i];sum=1;}else if(dp[i]==ans)sum++;}}if(ans)printf("%d %d\n",ans,sum);elseprintf("0 1\n");}}


0 0
原创粉丝点击