文章

14

粉丝

230

获赞

26

访问

71.2k

头像
利用栈和map解决括号匹配
P1838 南京理工大学机试题
发布于2022年8月5日 14:42
阅读数 4.9k

利用栈和map解决括号匹配问题;

栈的作用:遍历输入字符串,左括号入栈,右括号判断是否匹配,匹配则弹栈

map的作用:便于判断是否匹配,map<char,int>char是括号字符,int是括号字符的特征值,左括号为负数,右括号为正数,

(  的int特征值为-2 

  )的int特征值为 2

如果匹配,相加得0

 

带注释代码:

#include<bits/stdc++.h>
using namespace std;
map<char,int> m=
{
    {'<',-1},{'(',-2},{'[',-3},{'{',-4},{'>',1},{')',2},{']',3},{'}',4},
};
int main()
{
    string str;
    stack<char> s;
    int flag=0;
    while( cin>>str) //题目中说输入6行,好像不太对
    {
        flag=0;
        int len = str.size();
        for(int i=0; i<len; i++)
        {

            if(m[str[i]]<0)  //左括号入栈
                s.push(str[i]);
            else if(!s.empty()&&m[s.top()]+m[str[i]]==0)//右括号判断是否匹配
                s.pop();//匹配就弹出
            else       //否则跳出循环,判断下一个输入
                {
                        flag = 1;
                        break;

                }
        }

//如果栈为空,且flag为0,即匹配
//因为栈空不代表就可以匹配,比如"...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发