文章
15
粉丝
68
获赞
0
访问
8.3k
这个解法的本质其实很简单,这里提供一个例子来辅助大家理解
({[)]为例,首先加入(,第一次判定为不等{加入,之后又不等[加入,)仍然不等加入,此时为({[),这时其实已经很显然了,对于左括号和不能正确匹配的右括号都采用跳过的方式,并不是直接就结束了,最后所以判断是否为空,对于正常的状态,不进行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;
}
登录后发布评论
暂无评论,来抢沙发