UVA 673 - Parentheses Balance
2017-09-03 17:47
435 查看
题目大意:判断输入的字符串是否为真。真的定义如下,1.空格;2.AB(AB都为真);3.[A],(A)
解题思路:从字符串内部判断,用栈模拟,空格就不用考虑了,其他字符扔入栈内,循环,如果栈顶与字符串下一项正好相对(栈顶:(,字符串下一项:)。栈顶:[,字符串下一项:]。)出栈,继续判断栈顶与字符串再下一项是否正好相对。循环外继续将字符串扔入栈内。
ps:输出如果不是真的,要将栈清空。标记字符串的位置的变量变化须在判断前,不然出循环时位置错了。循环时要判断,栈是否为空。因为存在,为计算完全部字符串就为空的情况,也会因此不了循环出错。
ac代码:
解题思路:从字符串内部判断,用栈模拟,空格就不用考虑了,其他字符扔入栈内,循环,如果栈顶与字符串下一项正好相对(栈顶:(,字符串下一项:)。栈顶:[,字符串下一项:]。)出栈,继续判断栈顶与字符串再下一项是否正好相对。循环外继续将字符串扔入栈内。
ps:输出如果不是真的,要将栈清空。标记字符串的位置的变量变化须在判断前,不然出循环时位置错了。循环时要判断,栈是否为空。因为存在,为计算完全部字符串就为空的情况,也会因此不了循环出错。
ac代码:
#include <iostream> #include <stack> #include <cstring> using namespace std; int main() { stack <char> st; int n, len, temp2; char a[1005], temp; cin >> n; getchar(); while (n--){ gets(a); len = strlen(a); for (int i=0; i<len; i++) if (a[i] != ' '){ st.push(a[i]); temp2 = 0; temp = st.top(); while (temp == '(' && a[i+1] == ')' || temp == '[' && a[i+1] == ']'){ st.pop(); temp2 = 1; i++; if (st.empty()) break; temp = st.top(); } } if (st.empty()) printf("Yes\n"); else{ printf("No\n"); while (!st.empty()) st.pop(); } } return 0; }
相关文章推荐
- uva 673 Parentheses Balance
- UVa 673 Parentheses Balance (栈)
- UVa 673 Parentheses Balance(2)
- UVA - 673 Parentheses Balance
- UVa 673 Parentheses Balance
- UVA673 :Parentheses Balance
- UVA673:Parentheses Balance(平衡的括号)
- UVA-673 Parentheses Balance (桟)
- uva-673 Parentheses Balance
- UVa 673 - Parentheses Balance
- uva 673 Parentheses Balance (平衡的括号)堆栈模拟
- UVa-673-Parentheses Balance
- UVA - 673:Parentheses Balance
- uva673 Parentheses Balance
- UVa 673 - Parentheses Balance
- UVA 673 Parentheses Balance
- Uva673——Parentheses Balance
- UVa 673 Parentheses Balance(栈)
- UVA673--Parentheses Balance
- UVa-673-Parentheses Balance