一个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.(【】(()【】))
c

------解决方案--------------------
用栈        .
------解决方案--------------------
这个题要用栈来做的。。左括号入栈,右括号看是否与栈顶匹配,不匹配就出错,匹配就弹栈。。最后为空就是Yes。。。
你这样做是不对的。。给你一组数据吧。。

(())[]