B

- 题目大意

     给出两个字符()【】,然后根据给的条件来判断。

- 解题思路

    根据给的三个条件,然后利用栈来处理,对于暂时没有后括号匹配的前括号压入栈,遇到后括号时看栈顶的前括号与其是否匹配,如果匹配则弹出该前括号。还要判断下最后栈里面是不是有剩下的没有匹配的前括号。(注意空字符也行)

- 代码

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

using namespace std;

int main()
{
	int x;
	char c[200];
	cin >> x;
	getchar();
	while (x--)
	{
		stack<char>num;
		gets(c);
		if (strcmp(c, "
") == 0)
		{
			cout << "Yes" << endl;
			continue;
		}
		int a = strlen(c);
		for (int i = 0; i<a; i++)
		{
 		   if (c[i] == '('||c[i]=='[')
			{
				num.push(c[i]);
				continue;
			}
		   else if (num.empty())
		   {
			   num.push(c[i]);
		   }
		   else if (c[i] == ')'&&num.top()=='('|| c[i] == ']'&&num.top() == '[')
				{
					num.pop();
				}
				else
				{
					num.push(c[i]);
					break;
				}
			}
		
		if (num.empty())
			cout << "Yes" << endl;
		else
		   cout << "No" << endl;
			
	}

	return 0;
}

  

原文地址:https://www.cnblogs.com/alpacadh/p/8438480.html