紫书刷题 UVA 673 平衡的括号(Parentheses Balance)
作者:互联网
题目:https://vjudge.net/problem/UVA-673
思路
和简单的一道栈的题,但我还是WA了两次。
- 遍历字符串。
- 遇到空格时
continue
。 - 遇到
(
或[
时,把字符压入栈中。 - 遇到
)
或]
时,判断栈顶是否相吻合,若吻合就pop
出去,若不吻合,直接false
。当然判断栈顶前要检查一下栈是否为空,若为空也要false
掉。 - 遇到垃圾字符要
false
掉。 - 遍历结束后判断一下栈是否为空,若不为空,也是
false
的。
代码:
#include <cstdio>
#include <iostream>
#include <stack>
#include <sstream>
using namespace std;
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
stack<char> sta;
string line;
getline(cin, line);
stringstream ss(line);
int t; ss >> t;
while (t--)
{
int flag = true;
while (!sta.empty()) sta.pop();
string s;
getline(cin, s);
for (int i = 0; i < s.length(); i++) {
if (s[i] == ' ') continue;
if (s[i] == '(' || s[i] == '[') sta.push(s[i]);
else{
if (sta.empty()) { flag = false; break; }
if (s[i] == ')' && sta.top() == '(') sta.pop();
else if (s[i] == ']' && sta.top() == '[') sta.pop();
else { flag = false; break; }
}
}
if (!sta.empty()) flag = false;
if (flag) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}
标签:Parentheses,false,sta,int,pop,673,flag,UVA,include 来源: https://blog.csdn.net/qq_33512762/article/details/115097304