程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> SDUT 1451 括號東東

SDUT 1451 括號東東

編輯:C++入門知識

括號東東 Time Limit: 1000MS Memory limit: 65536K 題目描述 已知給出若干個只包含 “(” 或者 “)”字符串str!字符串的長度小於等於100W!求最長合法子串以及合法子串的個數!! 合法字串的格式要求如下:   1. “()”   2. “(())()”   3. “(()(()))”   不合法的情況如:   1. “)(”   2. “(()”   3. “(()))(”   4.......   輸入 輸入包含若干組測試數據,每組為一行字符串。   輸出 對於每組測試數據,輸出最長合法子串以及合法子串的個數(如果最長合法子串為0,那麼輸出 0 1)!   示例輸入 ))()((())))(()()) 示例輸出 0 16 2 提示 來源 Azheng@SDJZU 示例程序 這是我們周賽的一道題目,現在看來幾乎是最簡單的了,這道題目題意表述不清,尤其輸出最後讓求合法字串的個數的時候,這是這個題目的錯誤所在,其實這題目讓求的是最長合法字串的個數,我一開始就按照求合法字串的個數來做的,可是卻是一次又一次的WA,哎,最後問了別人,才知道這題目最後求的是最長合法字串的個數。    其實這道題目求所有合法字串的個數也是一個很不錯的題目,求最長合法合法字串的個數,就把這個題目弄的有些簡單了。   [cpp]   #include <stdio.h>   #include <string.h>   #include <math.h>   char s1[1000000];   char statck[1000000];   struct num   {       int pos;       char c;   }b[1000000];   int main()   {       int i,j,n,m,s,t,l,top,k,res,max;       while(scanf("%s",s1)!=EOF)       {           l=strlen(s1);           top=0;           for(i=0;i<=l-1;i++)           {               if(s1[i]=='(')               {                  b[top].pos=i;                  b[top++].c='(';               }else if(s1[i]==')')               {                   if(top>0&&b[top-1].c=='(')                   {                      top-=1;                   }else                   {                       top=0;                   }               }           }           for(i=top-1;i>=0;i--)           {               s1[b[i].pos]=')';           }           top=0; max=0; res=0; k=0;           for(i=0,s=0;i<=l-1;i++)           {               if(s1[i]=='(')               {                  statck[top++]='(';               }else if(s1[i]==')')               {                   if(top>0&&statck[top-1]=='(')                   {                       s+=2;                       top-=1;                       k=1;                   }else                   {                       if(max<s&&k==1)                       {                           max=s;                           s=0;                           res=1;                       }else if(max==s&&k==1)                       {                           res++;                           s=0;                       }                       s=0;                       top=0;                       k=0;                   }               }           }           if(k==1)           {               if(max<s)               {                   max=s;                   res=1;               }else if(max==s)               {                   res++;               }           }           if(max!=0)           {   www.2cto.com             printf("%d %d\n",max,res);           }else           {               printf("0 1\n");           }       }       return 0;   }      

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved