7-6-1 stack 括号匹配

7-6-1 stack 括号匹配

给定仅包含“()[]{}”六种括号的字符串,请你判断该字符串中,括号的匹配是否是合法的,也就是对应括号的数量、嵌套顺序完全正确。

输入格式:

第一行一个整数T(T<=10) 其后T行每行一个字符串只包含[{()}]六种字符(字符串长度2e5以内)

输出格式:

对于每个字符串,匹配输出Yes,否则输出No

输入样例:

2
{()[]}
([)]

输出样例:

Yes
No

代码如下:
这道题没有说各种括号的优先级,于是没有考虑优先级问题,只是无脑switch-case,优先级问题正在搜索ing…

#include
using namespace std;
stack<char> st;
bool isMarch(string str){
	int len = str.size();
	if(len%2) return false;
	for(int i=0;i<str.size();i++){
		switch(str[i]){
			case '(':
			case '[':
			case '{': st.push(str[i]);break;
			case ')':
				if(!st.empty()&&st.top()=='(') st.pop();
				else return false;
				break;
			case ']':
				if(!st.empty()&&st.top()=='[') st.pop();
				else return false;
				break;
			case '}':
				if(!st.empty()&&st.top()=='{') st.pop();
				else return false;
				break;
		}
	}
	return true;
}
int main(){
	int T;
	string str;
	cin >> T;
	while(T--){
		cin >> str;
		cout << ((isMarch(str)) ? "Yes" : "No") << endl;
	}
	return 0;
} 

你可能感兴趣的:(数据结构,#,暑假算法训练营)