题目描述
给定一个只包含字符’(’,’)’,’{’,’}’,’[‘和’]'的字符串,确定输入字符串是否有效。
有效的字符串应同时满足一下两个条件:
1.必须使用相同类型的括号关闭左括号。
2.必须以正确的顺序关闭左括号。
请注意,空字符串也被视为有效。
输入
第一行:一行长度不超过100个字符的待检测字符串
输出
第一行:如果括弧合法则输出Yes,否则输出No
代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
char s[110], ans[110];
int cnt = 0;
int top = 0, flag = 1;
char sr[110];
gets(s);
int l = strlen(s);
if (l == 0) cout << "No" << endl;
else
{
for (int i = 0; i < l; i++)
{
if (s[i] == '{' || s[i] == '}' || s[i] == '(' || s[i] == ')' || s[i] == '[' || s[i] == ']')
ans[cnt++] = s[i];
}
for (int i = 0; i < cnt; i++)
{
if (ans[i] == '(' || ans[i] == '{' || ans[i] == '[')
{
sr[top++] = ans[i];
}
else if (top == 0)
{
cout << "No" << endl;
flag = 0;
break;
}
else if (ans[i] - sr[top - 1] != 1 && ans[i] - sr[top - 1] != 2)
{
cout << "No" << endl;
flag = 0;
break;
}
else top--;
}
if (flag)
{
if (top == 0) cout << "Yes" << endl;
else cout << "No" << endl;
}
}
return 0;
}