文章

27

粉丝

0

获赞

80

访问

2.4k

头像
括号的匹配 题解:匹配判断,优先级判断,注意栈空情况
P1067 中山大学机试题
发布于2026年2月24日 15:18
阅读数 40

#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...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发