/* coder:ACboy date: 2010-3-7 result: AC description: UVa 673 Parentheses Balance */ #include <iostream> using namespace std; char stack[128]; int top; // 匹配两个字符 int match(char & a, char & b) { if ((a == '(' && b == ')') || (a == '[' && b == ']')) { return 1; } else return 0; } // 先对输入的字符串进行预处理,把所有的前导空格或中间的空格去掉 void delTheSpace(char input[], char output[]) { int len; int count; len = strlen(input); count = 0; for (int i = 0; i < len; i++) { if (input[i] != ' ') { output[count++] = input[i]; } } output[count] = '/0'; } int main() { int n; #ifndef ONLINE_JUDGE freopen("673.txt", "r", stdin); #endif scanf("%d/n", &n); while (n--) { char input[128] = {0}; gets(input); if (strcmp(input, "") == 0) { cout << "Yes" << endl; continue; } char temp[128]; delTheSpace(input, temp); top = 0; stack[top] = temp[0]; top++; int len = strlen(temp); for (int i = 1; i < len; i++) { // 如果栈顶的字符和当前的字符匹配,栈顶元素出栈 if (match(stack[top - 1], temp[i])) { top--; } // 否则入栈 else { stack[top++] = temp[i]; } } // 如果最后栈中没有元素,由题意得该字符串是correct则输出Yes。 if (top == 0) cout << "Yes" << endl; // 否则输出No。 else cout << "No" << endl; } return 0; }