文章
36
粉丝
505
获赞
55
访问
372.5k
这道题很明显用栈来写。
遍历字符串,遇到左括号时,先和栈顶元素判断是否符合括号优先级,不符合直接GG。否则入栈。
遇到右括号时,看和栈顶的括号是否相匹配,是的话弹出栈顶元素,不是的话直接GG。
最后再判断一下栈内元素是否全部弹出,栈内还有括号未匹配,直接GG,否则合法。
此题就结束了。
还要稍微注意一下栈内为空的情况下无法弹出元素。
#include<bits/stdc++.h>
using namespace std;
int val[127];
int n;
int main()
{
val['<'] = 1; val['('] = 2; val['['] = 3; val['{'] = 4;
cin >> n;
while (n--)
{
stack <char> S;
string str;
cin >> str;
for (int i = 0; i < str.length(); i++)
{
if (str[i] == '<' || str[i] == '(' || str[i] == '[' || str[i] == '{')
{
if (!S.empty() && val[str[i]] > val[S.top()])
goto GG;
S.push(str[i]);
}
else
{
if (S.empty())
goto GG;
if (S.top() == '<' && str[i] == '>' ||
S.top() == '(' && str[i] == ')' ||
S.top() == '[' && str[i] == ']' ||
S.top() == '{' && str[i] == '}')
S.pop();
else
goto GG;
}
}
if (!S....
登录后发布评论
同学你好,我在你的代码上改进了,但是正确率60%,不知道错在哪里了,你可以看看吗