/*这道题因为int stack[] 写成了 char stack[] 导致 括号超过255就出问题了。。。。。。让我纠结了好几天,真悲剧,以后检查题一定要从变量类型,开始检查*/
#include <stdio.h>
#include <string.h>
char str[100100];
int stack[100100];
int flag[100100];
int len, i, num, max, b, top;
int main()
{
memset( flag, 0, sizeof(flag) );
while( scanf( "%s", str ) != EOF )
{
len = strlen(str);
for( i = 0, top = 0; i < len; i++ )
{
if( str[i] == '(' || str[i] == '[' )
{
stack[top] = i;
top++;
}
if( str[i] == ')' )
{
if( top == 0 )
continue;
if(str[stack[top-1]] == '(' )
{
flag[ stack[top-1] ] = 1;
flag[i] = 1;
top--;
}
else
top = 0;
}
if( str[i] == ']' )
{
if(top == 0 )
continue;
if( str[stack[top-1]] == '[' )
{
flag[ stack[top-1] ] = 1;
flag[i] = 1;
top--;
}
else
top = 0;
}
}
num = 0;
max = 0;
b = 0;
for( i = 0; i < len; i++ )
{
if( flag[i] == 1 )
num++;
if( num > max )
{
max = num;
b = i + 1 - max;
}
if( flag[i] == 0 )
num = 0;
}
for( i = b; i < b + max; i++ )
printf( "%c", str[i] );
printf( "\n\n" );
}
return 0;
}
ZOJ 2704 括号匹配栈
最新推荐文章于 2018-03-25 16:16:50 发布