苗苗今天刚刚学会使用括号,不过他分不清小括号,中括号,大括号和尖括号,不知道怎么使用这些括号,请帮助他判断括号使用是否正确。
注意:不需要区分括号的优先级。
输入格式
共一行,包含一个由 <
,(
,{
,[
,>
,)
,}
,]
构成的字符串。
输出格式
如果输入的字符串中的括号正确匹配则输出 yes
,否则输出 no
。
数据范围
输入字符串长度不超过 1000010000。
输入样例:
(){}
输出样例:
yes
#include<bits/stdc++.h>
using namespace std;
stack<char> st;
const int N = 100100;
long long i=0;
int main()
{
string str;
cin>>str;
while(str[i]!='\0'){
switch(str[i]){
//左括号入栈
case '(' :
case '<' :
case '{' :
case '[' :
st.push(str[i]);
break;
//遇到右括号,一定不要忘记判断是否为空,否则数组越界
case ')' : if(st.empty() || st.top()!='(') {cout<<"no"<<endl; return false;} else st.pop();
break;
case '>' : if(st.empty() || st.top()!='<') {cout<<"no"<<endl; return false;} else st.pop();
break;
case '}' : if(st.empty() || st.top()!='{'){ cout<<"no"<<endl; return false;} else st.pop();
break;
case ']' : if(st.empty() || st.top()!='[') {cout<<"no"<<endl; return false;} else st.pop();
break;
default:
break;
}
i++;
}
if(st.empty()) cout<<"yes"<<endl;
else
cout<<"no"<<endl;
return 0;
}