1. 程式人生 > >尋找最長合法括號序列九度0J

尋找最長合法括號序列九度0J

#include<stdlib.h>
#include<stdio.h>
#include<string.h> 


main()
{
char str[1024] = {0};
int  left = 0, right = 0, count = 0, maxn = 0, count1 = 0;
int  i = 0, j= 0;
printf("請輸入括號字串:");
    
scanf("%s", str);
    for(i = 0; i < strlen(str); i++)            //i < strlen(str) 
{
   
   if(str[0] == ')' && i == 0)             //此句可能多餘 
{

continue;
}
        
if(str[i] == '(')                      
{
     
 left++;                  //出現左括號加1 
     }  
 
if(str[i] == ')')
{
right++;                   
if(left >= right)          //left計數做括號個數, right計數右括號數 
{

left--;                
right--;
count++;               //count計數成功配對的對數, 對數加1, left和right都減1 
    }
   else
   {
   left = 0;             // 如果右括號數大於左括號數, 全部置0, 
   right = 0;
   count = 0;                  //count置0, count為成功配對括號的對數 
}
 }
         
         if(count > maxn)                  //不斷重新整理最大成功配對括號的對數 
         {
         maxn = count;                  //只要重新整理最大對數即賦值給maxn, count1為出現最大對數count的次數, count1重置1 
         count1 = 1;
}
else if(count == maxn && maxn != 0)     //maxn != 0 避免出現沒有任何成功配對時, 計數count1自加 
{
maxn = count;                        //最大成功配對對數相同時, count1加1 
count1++;
 }
}

printf("%d , %d", maxn * 2, count1);         // maxn * 2計算最長成功配對的括號個數, count1最長配對括號個數出現的次數 
return 0;
 }