括号匹配
Sample Input
2
{{[[(())]]}}
({[}])
Sample Output
Valid //匹配
Invalid //不匹配
c
#include<stdio.h>
#include<string.h>
int main()
{
char a[100],b[100];
int top,t,flag,i,n;
scanf("%d\n",&t);
while(t--)
{
flag=1;
gets(a);
top=0;i=-1;
n=strlen(a);
while(flag&&i<n)
{
i++;
switch(a[i])
{
case '(':
case '{':
case '[':
b[top]=a[i];
top++;
break;
case ')':
if(b[top-1]!='(')
flag=0;
else
top--;
break;
case '}':
if(b[top-1]!='{')
flag=0;
else
top--;
break;
case ']':
if(b[top-1]!='[')
flag=0;
else
top--;
break;
}
}
if(flag==1&&top==0)
printf("Valid\n");
else
printf("Invalid\n");
top=0;
}
return 0;
}
栈
//hrbust1054
#include <stdio.h>
#include<algorithm>
#include<cstring>
#include<stack>
#include<iostream>
using namespace std;
int main()
{
char c[1000];
int N,i,d=1;
scanf("%d",&N);
while(N--)
{
scanf("%s",&c);
int str=strlen(c);
stack<char> st;
for(i=0;i<str;i++)
{
if(c[i]=='('||c[i]=='{'||c[i]=='[')
st.push(c[i]);
else if(c[i]==')'&&!st.empty()&&st.top()=='(')
st.pop();
else if(c[i]==')'&&!st.empty()&&st.top()!='(')
d=0;
else if(c[i]==')'&&st.empty())
d=0;
else if(c[i]==']'&&!st.empty()&&st.top()=='[')
st.pop();
else if(c[i]==']'&&!st.empty()&&st.top()!='[')
d=0;
else if(c[i]==']'&&st.empty())
d=0;
else if(c[i]=='}'&&!st.empty()&&st.top()=='{')
st.pop();
else if(c[i]=='}'&&!st.empty()&&st.top()!='{')
d=0;
else if(c[i]=='}'&&st.empty())
d=0;
}
if(!st.empty()||d==0)
printf("Invalid\n");
else
printf("Valid\n");
d=1;
}
return 0;
}