NWU_ACM

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
// stack
#include <stdio.h>
#include <string.h>

char str[11000];
char stack1[11000];
int main()
{
    int N;
    scanf("%d",&N);
    while(N--)
    {
        int i,j,top1;
        memset(str,0,sizeof(str));
        memset(stack1,0,sizeof(stack1));
        scanf("%s",str);
        top1=1;
        for(i=0;i<strlen(str);i++)
        {
            if(str[i]=='('||str[i]=='[')
            stack1[top1++]=str[i];
            if(str[i]==')')
            {
                if(stack1[top1-1]=='(')
                --top1;
                else
                stack1[top1++]=str[i];
            }
            if(str[i]==']')
            {
                if(stack1[top1-1]=='[')
                --top1;
                else
                stack1[top1++]=str[i];
            }
        }
        if(top1==1)
        printf("Yes\n");
        else
        printf("No\n");
   }
   return 0;
}
/// vector
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
using namespace std;
bool isok(char a, char b)  // 字符a 和 b 是否配对
{
  if (a == '(' && b == ')')
    return 1;
  if (a == '[' && b == ']')
    return 1;
  return 0;

}
int main()
{
  int T, i, j;
  char s[10000];
  vector<char> stk;
  cin >> T;

  while (T--)
  {
    scanf("%s", s);
    stk.clear();
    int sign = 1;
    for (i = 0; i < strlen(s); i++)
    {
      if (s[i] == '[' || s[i] == '(')
        stk.push_back(s[i]);
      else if (isok(stk.back(), s[i]))
        stk.pop_back();
      else {
        sign = 0; break;
      }
    }
    if (!stk.empty()) sign = 0;
    if (sign == 0)
      cout << "No\n";
    else cout << "Yes\n";
  }
  return 0;
}

  

posted on 2017-03-27 21:28  NWU_ACM  阅读(111)  评论(0编辑  收藏  举报