文章

9

粉丝

37

获赞

91

访问

2.3k

头像
括号的匹配 题解:
P1067 中山大学机试题
发布于2025年3月6日 20:11
阅读数 303

在普通的括号匹配上加上优先级比较,例如<{}>,可以匹配栈中为空,但是优先级是错的,只需要在代码中加上判断优先级即可。代码如下

#include<bits/stdc++.h>
using namespace std;
int priority(char c){
    if(c=='{') return 4;
    else if(c=='[') return 3;
    else if(c=='(') return 2;
    else  return 1;
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        stack<char> t;
        int flag=0;//定义flag判断是否匹配
        int len=s.length();
        for(int j=0;j<len;j++){
            if(!t.empty()){
                int now=t.top();
                if((now=='{'&&s[j]=='}')||(now=='['&&s[j]==']')||(now=='('&&s[j]==')')||(now=='<'&&s[j]=='>')){
                    t.pop();
                }
                else{
                    if(s[j]=='{'||s[j]=='['||s[j]=='('||s[j]=='<'){
                        if(priority(s[j])>priority(now))//后面的优先级大于前面将flag标记位1,表示不能匹配
                            flag=1;
    ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发