时间限制:1 s 内存限制:256 MB 测试点数:6
【题目描述】
判断包含有括号{,[,<,(,),>,],}组成的字符串是否匹配。
【输入格式】
输入为一行字符串s(1≤s≤200)
【输出格式】
输出有一行,如果括号匹配则输出yes,否则输出no.
【样例输入】
(x+y)*(a+b)
【样例输出】
yes
#include <bits/stdc++.h>
using namespace std;
int cmp(char a) {
if (a == '{' || a == '}')
return 1;
else if (a == '(' || a == ')')
return 2;
else if (a == '[' || a == ']')
return 3;
else if (a == '<' || a == '>')
return 4;
}
int main() {
stack<char> str;
char a = getchar();
int flag = 1;
while (a != '\n') {
if (a == '{' || a == '[' || a == '<' || a == '(')
str.push(a);
else if (a == '>' || a == ')' || a == ']' || a == '}') {
if ((!str.empty()) && cmp(str.top()) == cmp(a))
str.pop();
else
flag = 0;
}
a = getchar();
}
if (flag) {
if (str.empty())
printf("yes");
else
printf("no");
} else printf("no");
return 0;
}
如果无法AC就用这个代码
#include <bits/stdc++.h>
using namespace std;
int cmp(char a) {
if (a == '{' || a == '}')
return 1;
else if (a == '(' || a == ')')
return 2;
else if (a == '[' || a == ']')
return 3;
else if (a == '<' || a == '>')
return 4;
}
int main() {
stack<char> str;
char a[100];
scanf("%s", a);
int flag = 1;
int len = strlen(a), i = 0;
while (i < len) {
if (a[i] == '{' || a[i] == '[' || a[i] == '<' || a[i] == '(')
str.push(a[i]);
else if (a[i] == '>' || a[i] == ')' || a[i] == ']' || a[i] == '}') {
if ((!str.empty()) && cmp(str.top()) == cmp(a[i]))
str.pop();
else
flag = 0;
}
i++;
}
if (flag) {
if (str.empty())
printf("yes");
else
printf("no");
} else printf("no");
return 0;
}