暴力集锦

来源:互联网 发布:淘宝客服计划怎么写 编辑:程序博客网 时间:2024/04/29 18:10

http://blog.csdn.net/acm_ted/article/details/8022419


第三题:Bracket Sequence

题意:给你一段只包含'(',')','[',']'的字符串,问哪段子串的括号匹配是正确的且包含尽可能多的'['。

题解:用num数组记录前i个字符包含'['的个数,再计算以第i个字符开始,符合条件的字符串的长度,用l数组记录,最后查找最优值。

代码:

#include<cstdio>#include<cstring>using namespace std;#define M 100005char s[M];int num[M],l[M];bool check(char a,char b){    return ((a=='('&&b==')')||(a=='['&&b==']'));}int main(){    scanf("%s",s);    int len=strlen(s);    memset(l,0,sizeof(l));    num[0]=0;    for(int i=0; i<len; ++i)        num[i+1]=num[i]+(s[i]=='[');    for(int i=len-2; i>=0; --i)    {        if(s[i]==')'||s[i]==']') continue;        int idx=i+1+l[i+1];        if(check(s[i],s[idx]))            l[i]=idx-i+1+l[idx+1];    }    int ans=0,st=0;    for(int i=0; i<len; ++i)        if(ans<num[i+l[i]]-num[i])        {            ans=num[i+l[i]]-num[i];            st=i;        }    printf("%d\n",ans);    for(int i=0; i<l[st]; ++i)        printf("%c",s[st+i]);    printf("\n");    return 0;}



0 0
原创粉丝点击