1. 程式人生 > >B - Parentheses Balance (UVA - 673)

B - Parentheses Balance (UVA - 673)

etc std 括號 while ets space 字符 ret light

- 題目大意

給出兩個字符()【】,然後根據給的條件來判斷。

- 解題思路

根據給的三個條件,然後利用棧來處理,對於暫時沒有後括號匹配的前括號壓入棧,遇到後括號時看棧頂的前括號與其是否匹配,如果匹配則彈出該前括號。還要判斷下最後棧裏面是不是有剩下的沒有匹配的前括號。(註意空字符也行)

- 代碼

#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, "\n") == 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;
}

  

B - Parentheses Balance (UVA - 673)