#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;
}