括号匹配:
题解:
这道题是一道栈的引入,但其实不用栈,我们只需要用数组模拟一个栈就完了,遇到一个左系列的就存入,遇到右系列就判断是否与栈顶相匹配,最后若栈为空,则TRUE,否则FALSE
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
char x[200001],a[200001];
int cnt1=0;
scanf("%s",x);
for(int j=0;j<strlen(x);j++){
if(x[j]=='{'||x[j]=='('||x[j]=='['||x[j]=='<'){
cnt1++;
a[cnt1]=x[j];
}
else{
if(a[cnt1]=='{'||x[j]=='}'){
a[cnt1]=0;
cnt1--;
}
else if(a[cnt1]=='<'||x[j]=='>'){
a[cnt1]=0;
cnt1--;
}
else if(a[cnt1]=='['||x[j]==']'){
a[cnt1]=0;
cnt1--;
}
else if(a[cnt1]=='('||x[j]==')'){
a[cnt1]=0;
cnt1--;
}
}
printf("%s %d\n",a,cnt1);
}
if(cnt1!=0) printf("FALSE");
else printf("TRUE");
}
return 0;
}