E-括號匹配

括號匹配

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章