文章
27
粉丝
0
获赞
80
访问
2.4k
#include <iostream>
#include <stack>
using namespace std;
bool isMatch(char left,char right){
return left=='{'&&right=='}'||
left=='['&&right==']'||left=='<'&&right=='>'
||left=='('&&right==')';
}
int level(char c) {
if (c == '{' || c == '}') return 1;
if (c == '[' || c == ']') return 2;
if (c == '(' || c == ')') return 3;
if (c == '<' || c == '>') return 4;
return 0;
}
bool isValid(string s){
stack<char> st;
//左括号入栈,右括号不入栈,直接匹配
for(char c:s){
if(c=='('||c=='['||c=='<'||c=='{'){
//左括号入栈时,需要保持严格级别顺序,当栈不空,加入的元素必须比栈顶元素级别大
if(!st.empty()&&level(st.top())>level(c)) return false;
st.push(c);
}
else{
//右括号需匹配
if(st.empty())return false;//栈空匹配失败
if(!isMatch(st.top(),c))return false;//括号不匹配
st.pop();//检测一个出一个
}
}
return st.empty();//最后不能留左括号,必须为空
}
int main(){
int n;
cin>>n;
for(int i...
登录后发布评论
暂无评论,来抢沙发