算法思想
①栈的初始化,顺序读入括号
②若是左括号,作为一个更加紧急的期待压入栈中,自然使原有栈中所有未消解的期待的急迫性降低了一级
③若是右括号,则或使置于栈顶的最急迫期待得到消解,或是不合法的情况。算法结束时,栈为空,否则括号序列不匹配
例题:AC3693
#include<iostream>
#include<stack>
#include<unordered_map>
#include<cstdio>
#include<cstring>
using namespace std;
unordered_map<char,int>mp;
bool check(string s)
{
stack<int> stk;
for(auto c:s)
{
int t = mp[c];
//匹配到右括号
if(t > 0)
{
if(stk.empty() || stk.top() != -t)return false;
stk.pop();
}
//匹配到左括号
else
{
stk.push(t);
}
}
return stk.empty();
}
int main()
{
string s;
mp['{'] = -4,mp['}'] = 4;
mp['['] = -3,mp[']'] = 3;
mp['('] = -2,mp[')'] = 2;
mp['<'] = -1,mp['>'] = 1;
cin>>s;
if(check(s))puts("yes");
else puts("no");
return 0;
}