您的位置:首页 > 其它

UVA-673 括号匹配--栈

2017-02-03 16:32 337 查看
       如果是一个合法的序列,每对配对的括号的两个字符(‘(’ 和 ')' 或者 '[' 和 ']')一定是相邻的,每次判断下该字符是否有配对即可。

       如果配对,将左括号出栈即可。特别注意:空格也是合法的。

AC代码:

#include<cstdio>
#include<stack>
using namespace std;
const int maxn = 200;
char str[maxn];
stack<char>s;
bool Balance(){
char ch;
for(int i = 0; str[i] != '\n'; ++i){
if(str[i] == ' ') continue;
if(!s.empty()) {
ch = s.top();
if(ch == '(' && str[i] == ')' || ch == '[' && str[i] == ']') s.pop();
else s.push(str[i]);
}
else s.push(str[i]);
}
if(s.empty()) return true;
else while(!s.empty()) s.pop();
return false;
}
int main(){
int T;
scanf("%d", &T);
getchar();
while(T--){
fgets(str, sizeof(str), stdin);
if(Balance()) printf("Yes\n");
else printf("No\n");
}
return 0;
}


如有不当之处欢迎指出!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: