文章

15

粉丝

68

获赞

0

访问

8.3k

头像
南京理工-括号匹配 题解:map辅助判断
P1838 南京理工大学机试题
发布于2024年3月30日 12:42
阅读数 585

这个解法的本质其实很简单,这里提供一个例子来辅助大家理解

({[)]为例,首先加入(,第一次判定为不等{加入,之后又不等[加入,)仍然不等加入,此时为({[),这时其实已经很显然了,对于左括号和不能正确匹配的右括号都采用跳过的方式,并不是直接就结束了,最后所以判断是否为空,对于正常的状态,不进行push,只进行pop,最后就可以得到空

#include <bits/stdc++.h>
using namespace std;

int main(){
	string s;
	map<char,char> cmp={{'<','>'},{'(',')'},{'[',']'},{'{','}'}};
	while(cin>>s){
		stack<char> st;
		for(int i=0;i<s.size();i++){
			if(st.size()==0){
				st.push(s[i]);
			}else{
				char top =st.top();
				if(cmp[top]==s[i]){
					st.pop();
				}else{
					st.push(s[i]);
				}
			}
		}
		if(st.size()==0)cout<<"yes"<<endl;
		else cout<<"no"<<endl;
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发