AC

虚空终端  •  2个月前


注意括号有优先级的区别

#include<iostream>
#include<cstring>
#include<algorithm>
#include<stack>

using namespace std;

const char rfc[4]={'<','(','[','{'};
const char rfc1[4]={'>',')',']','}'};

pair<int,int> check(char c)
{
	pair<int,int> t={-1,0};
	for(int i=0;i<4;i++)
		if(c==rfc[i]||c==rfc1[i])
		{
			t.first=i+1;
			t.second=(c==rfc1[i]);
			break;
		}
	return t;
}

int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		bool flag=1;
		stack<int> s;
		string str;
		cin>>str;
		for(auto i:str)
		{
			pair<int,int> t=check(i);
			if(t.first==-1)
				continue;
			if(!t.second)
			{
				if(s.empty())
					s.push(t.first);
				else
				{
					if(t.first>s.top())
					{
						flag=0;
						break;
					}
					s.push(t.first);
				}
			}
			else
			{
				if(s.empty())
				{
					flag=0;
					break;
				}
				if(s.top()!=t.first)
				{
					flag=0;
					break;
				}
				s.pop();
			}
		}
		if(flag&&s.empty())
			cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
	}
	return 0;
}

评论:

请先登录,才能进行评论