10 solutions

  • 0
    @ 2022-1-2 1:22:18

    代码长度有点夸张,但是感觉应该很好理解

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        cin>>n;
        while(n--)
        {   stack <char> s;
            string x;
            cin>>x;
            getchar();
            int ret=1,l=x.size();//用ret记录是否符合,初始值为1,只要没有改变就基本符合
            for(int i=0;i<l;i++)
            {
            	
    		 if(!s.empty())
    		 {	// 正常的包裹是这样的{[(<>)]} 
    			if(s.top()=='['&&x[i]=='{')
    			{//‘[’是在‘{’的内层的符号,所以不能让‘{’比‘[’后出现,如果后出现就不符合
            		ret=0;break;
    			}
    			if(s.top()=='('&&(x[i]=='['||x[i]=='{'))//同理↑↓
    			{
    				ret=0;break;
    			} 
    			if(s.top()=='<'&&(x[i]=='('||x[i]=='['||x[i]=='{'))
    			{
    				ret=0;break;
    			}	
    	     }
    	    if(s.empty()&&(x[i]=='}'||x[i]=='>'||x[i]==']'||x[i]==')') )
    			{
    				ret=0; break;
    			}//如果栈是空的,只要进入一个反括,那么这串符号就一定不符合了
    			if(x[i]=='{'||x[i]=='<'||x[i]=='('||x[i]=='[')
    			{
    				s.push(x[i]);
    			}
            
            	if(x[i]=='}'||x[i]=='>'||x[i]==']'||x[i]==')')
            	{//正常的符号匹配(写的有点赘余了,用if其实更好)
            		switch(x[i])
            		{
            			case '}':if('{'==s.top())
            					{
            						s.pop();
    							}
    							else ret=0;
    							break;
    					case ')':if('('==s.top())
            					{
            						s.pop();
    							}
    							else ret=0;
    							break;	
    				    case '>':if('<'==s.top())
            					{
            						s.pop();
    							}
    							else ret=0;
    							break;
    					case ']':if('['==s.top())
            					{
            						s.pop();
    							}
    							else ret=0;
    							break;	
    			    }
    			}	
    	    }
    		ret==1&&s.empty()?cout<<"YES"<<endl:cout<<"NO"<<endl;
       }//注意不仅要判断ret还要判断栈是否为空
        return 0;
    }
    

    Information

    ID
    296
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    7
    Tags
    # Submissions
    176
    Accepted
    36
    Uploaded By