UVa 673 Parentheses Balance

来源:互联网 发布:上海行知中学初中部 编辑:程序博客网 时间:2024/06/18 12:17

思路分析:

利用栈实现括号匹配即可。读取字符串后,遇到 ( 或 [ 则入栈; 遇到 ) ,若栈顶为( 则弹出,否则错误, ] 的处理类似。

注意点:

1. 每次看栈顶元素前,都要先判断栈空

2.每个字符串处理结束后,要看栈是否为空,如果不空,说明有剩余,则也说明匹配失败,视为错误

3.每个字符串处理前,先把栈清空,因为前一次处理可能有残留

4.注意空串的判定,题目中说明了空串为合法。因此输入的时候选择getline(cin,str) 这样可以输入空串

题解:

#include <iostream>#include <string>#include <stack>using namespace std;string str;stack<char> s;bool judge(string str){while(!s.empty()) s.pop();for(int i = 0; i < str.size(); i++){if(str[i] == '(' || str[i] == '[') s.push(str[i]);else if(str[i] == ')' && !s.empty() && s.top() == '(') s.pop();else if(str[i] == ']' && !s.empty() && s.top() == '[') s.pop();else return false;}if(!s.empty()) return false;return true;}int main(){int n;scanf("%d\n", &n);while(n--){getline(cin, str);if(judge(str)) printf("Yes\n");else printf("No\n");}return 0;}