尋找最長合法括號序列九度0J
阿新 • • 發佈:2019-01-22
#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;
}
#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;
}