文章
14
粉丝
230
获赞
26
访问
70.3k
利用栈和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,即匹配
//因为栈空不代表就可以匹配,比如"...
登录后发布评论
暂无评论,来抢沙发