一个oj题,很使小弟我困惑,请各位给指点指点
一个oj题,很使我困惑,请各位给指点指点
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])
样例输出
No
No
Yes
以下是我的代码:
#include<stdio.h>
#include<string.h>
int f(char a,char b)
{if(a=='('&&b==')'||a=='['&&b==']')
return(1);
else
return(0);
}
main()
{int i=1,n,j,k,flag,h;
char s[10000];
scanf("%d",&n);
while(i<=n)
{scanf("%s",s);
h=strlen(s);
flag=0;
if(h%2!=0)
{printf("No\n");i++;continue;}
j=0;
k=h-1;
while(j<k)
{
if(f(s[j],s[j+1]))
j+=2;
else if(f(s[j],s[k]))
{k--;j++;}
else
{printf("No\n");flag=1;break;}
}
if(flag==0)
{printf("Yes\n");i++;continue;}
i++;
}
}
提交时总是出错,请问有没有什么特别的数据?这几种是否符合描述?
1.()【】()();2.【()【】(【】)】;3.(【】(()【】))
------解决方案--------------------
用栈 .
------解决方案--------------------
这个题要用栈来做的。。左括号入栈,右括号看是否与栈顶匹配,不匹配就出错,匹配就弹栈。。最后为空就是Yes。。。
你这样做是不对的。。给你一组数据吧。。
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])
样例输出
No
No
Yes
以下是我的代码:
#include<stdio.h>
#include<string.h>
int f(char a,char b)
{if(a=='('&&b==')'||a=='['&&b==']')
return(1);
else
return(0);
}
main()
{int i=1,n,j,k,flag,h;
char s[10000];
scanf("%d",&n);
while(i<=n)
{scanf("%s",s);
h=strlen(s);
flag=0;
if(h%2!=0)
{printf("No\n");i++;continue;}
j=0;
k=h-1;
while(j<k)
{
if(f(s[j],s[j+1]))
j+=2;
else if(f(s[j],s[k]))
{k--;j++;}
else
{printf("No\n");flag=1;break;}
}
if(flag==0)
{printf("Yes\n");i++;continue;}
i++;
}
}
提交时总是出错,请问有没有什么特别的数据?这几种是否符合描述?
1.()【】()();2.【()【】(【】)】;3.(【】(()【】))
c
------解决方案--------------------
用栈 .
------解决方案--------------------
这个题要用栈来做的。。左括号入栈,右括号看是否与栈顶匹配,不匹配就出错,匹配就弹栈。。最后为空就是Yes。。。
你这样做是不对的。。给你一组数据吧。。
(())[]