Uva


用栈就搞定了,忘了刚开始会出现 )) ,]] 这种情况,没有加栈非空的条件,结果RE了好几次,智商太拙计。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <string>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <stack>
#include <queue>
#include <bitset> 
#include <cassert> 
#include <cmath>

using namespace std;

const int maxn = 256;

int main()
{
	int n;
	scanf("%d", &n);
	getchar();
	while (n--) {
		char str[maxn];
		fgets(str, sizeof(str), stdin);
		bool flag = true;
		stack<char> stc;
		for (int i = 0; str[i] != ''; i++) {
			switch (str[i])
			{
			case '(':
				stc.push(str[i]);
				break;
			case '[':
				stc.push(str[i]);
				break;
			case ')':
				// 刚开始忘了加!stc.empty(),RE了好几次,太伤心了
				if (!stc.empty() && stc.top() == '(') {
					stc.pop();
				}
				else {
					flag = false;
				}
				break;
			case ']':
				if (!stc.empty() && stc.top() == '[') {
					stc.pop();
				}
				else {
					flag = false;
				}
				break;
			}
			if (!flag) {
				break;
			}
		}
		if (flag && stc.empty()) {
			printf("Yes
");
		}
		else {
			printf("No
");
		}
	}

	return 0;
}




原文地址:https://www.cnblogs.com/zhangyaoqi/p/4591544.html