您的位置:首页 > 其它

UVA 673 - Parentheses Balance

2017-09-03 17:47 435 查看
题目大意:判断输入的字符串是否为真。真的定义如下,1.空格;2.AB(AB都为真);3.[A],(A)

解题思路:从字符串内部判断,用栈模拟,空格就不用考虑了,其他字符扔入栈内,循环,如果栈顶与字符串下一项正好相对(栈顶:(,字符串下一项:)。栈顶:[,字符串下一项:]。)出栈,继续判断栈顶与字符串再下一项是否正好相对。循环外继续将字符串扔入栈内。

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: