您的位置:首页 > 其它

UVA - 673 Parentheses Balance

2016-07-21 19:15 435 查看

UVA - 673 Parentheses Balance

题目大意:1)空串为真 , 2)若字符串A为真,则(A) [A]都为真。3)字符串A和B都真,则字符串AB为真。求给出的串是否为真

解题思路:从左往右扫 最近的两个如果配对就去掉 不停的扫 直到全部去掉 或者没有东西可以去掉

注意:字符串可能是空的

/*************************************************************************
> File Name: UVA-673.cpp
> Author: Robin
> Mail: 499549060@qq.com
> Created Time: 2016年07月21日 星期四 15时26分06秒
************************************************************************/

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int main() {
int N;
scanf("%d\n", &N);
string s;
int pd[10000];
while (N--) {
getline(cin,s);
int flag  = 0;
memset(pd, 0, sizeof(pd));
while(1) {
flag = 1;
int t = 0;
while(pd[t] && t < s.length())t++;
int cc = t;
char c = s[t];
int tt = t+1;
while (pd[tt] && tt < s.length())tt++;

for (int i = tt; i < s.length(); i++) {
if (pd[i]) continue;
if ((c == '[' && s[i] == ']') || (c == '(' && s[i] == ')')) {
pd[cc] = 1;
pd[i] = 1;
flag = 0;
break;
}
else {
cc = i;
c = s[i];
}
}
if (flag) break;
}
for (int i = 0; i < s.length(); i++)
if (!pd[i]) flag = 0;
else flag = 1;
if (flag) printf("Yes\n");
else printf("No\n");
}

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