题目大意:判断括号是否匹配
AC代码:
#include<stdio.h>
#include<string.h>
int judge(char a,char b)//判断相连的字符是否相等
{
if((a=='['&&b==']')||(a=='('&&b==')'))
return 1;
return 0;
}
int main()
{
int n,i,l,flag,k1,k2;
char s[10000];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",s);
k1=0;
l=strlen(s);
k2=l-1;
if(l%2) //长度为奇数
{
printf("No\n");
getchar();
continue;
}
flag=1;
while(k1<k2)
{
while(judge(s[k1],s[k1+1])) k1+=2; //处理相邻的配对,从前向后
while(judge(s[k2-1],s[k2])) k2-=2; //从后向前
if(k1<k2)
if (judge(s[k1],s[k2]))
{k1++;k2--;}//判断对称的情况
else
{
flag=0;printf("No\n");break;}
}
if(flag) printf("Yes\n");
getchar();
}
return 0;
}
AC代码2:(别人的)
#include<iostream>
02.
#include<vector>
03.
#include<string>
04.
using
namespace
std;
05.
int
main()
06.
{
07.
int
n;
08.
cin>>n;
09.
while
(n--)
10.
{
11.
vector<
char
> vec;
12.
string ch;
13.
vec.push_back(
' '
);
14.
cin>>ch;
15.
for
(
int
i=0;i<ch.length();i++)
16.
{
17.
vec.push_back(ch[i]);
18.
if
( vec.back()-1 == *(vec.end()-2) || vec.back()-2 == *(vec.end()-2))
19.
{
20.
vec.pop_back();
21.
vec.pop_back();
22.
}
23.
}
24.
if
(vec.size()==1)
25.
cout<<
"Yes"
<<endl;
26.
else
27.
cout<<
"No"
<<endl;
28.
}
29.
return
0;
30.
}