一个十分简单的题,大家来看看哪里错了
昨天无聊就去做简单题,然后发现错了,大家来看看哪里错了
Description
给你一个字符串,只含有‘(’和‘)’,然后你判断一下是否合法
Input
有多组数据,每组数据一行字符串s(|s|<=100),如题目所述
Output
如果合法则输出YES,否则输出NO。
Sample Input
(()())
)(
Sample Output
YES
NO
我的代码
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int match(char *a,int top,char c)
{
if(a[top]=='('&&c==')')
return 1;
return 0;
}
int main()
{
int top;
int i ,j;
char str[120]={0};
int len;
char stack[120]={0};
while(scanf("%s",str)!=EOF)
{
len=strlen(str);
top=1;
for(i=0;i<len;i++)
{
if(match(stack,top-1,str[i])) //如果匹配,则出栈
top--;
else
stack[top++]=str[i]; //否则进栈
}
if(top-1) //如果最后top不是1,那么是错误的
printf("N0\n");
else
printf("YES\n");
memset(str,0,sizeof(str));
memset(stack,0,sizeof(stack));
}
return 0;
}
分享到:
[解决办法]
int valid( char * input )
{
int count = 0;
int is_valid_char = 1;
assert(input != NULL);
while ( (*input != '\0') && is_valid_char && (count >= 0) )
{
switch (*input)
{
case '(':
++ count;
break;
case ')';
-- count;
break;
default:
is_valid_char = 0;
break;
}
}
return (count == 0) && is_valid_char;
}
printf("NO\n"); //错printf("N0\n");