# 題目: UVa 673 - Parentheses Balance

# 題目說明

有一個包含[]()這四種符號的字串,你需要判斷此字串是否符合以下規則

  1. 空字串為correct
  2. 如果AB皆為correctABcorrect
  3. 如果Acorrect,那[A](A)也為correct

INPUT:
第一行為一個整數T,代表有幾筆資料
每筆資料輸入一串字串


OUTPUT:
結果為correct輸出Yes,否則輸出No

# 解題方法

使用stack
當輸入為])時,判斷stack.top()是否為[(,是則pop
其餘狀況皆pushstack
最後判斷stack是否為空即可

# 參考程式碼

#include <iostream>
#include <stack>
#include <string>

using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	int T;
	string str;
	cin >> T;
	cin.ignore();

	while (T--)
	{
		stack<char> S;
		getline(cin, str);

		for (auto& c : str)
		{
			if (c == ']')
			{
				if (!S.empty() && S.top() == '[') S.pop();
				else (S.emplace(c));
			}
			else if (c == ')')
			{
				if (!S.empty() && S.top() == '(') S.pop();
				else (S.emplace(c));
			}
			else S.emplace(c);
		}

		cout << (S.empty() ? "Yes" : "No") << "\n";
	}


	return 0;
}