括号比配

括号匹配

括号匹配问题主要是栈的运用。输入一串由[,],(,),{,}组成的字符串,判断其是否匹配,如[],[()]是匹配的,而[{]等则不匹配。
代码可以这样:
#include<iostream>
#include<stack>
#include<string>
using namespace std;

bool brackets(string s);

int main()
{
	string s;
	while(cin>>s)
	{
		if(brackets(s))
			cout<<"Yes"<<endl;
		else
			cout<<"No"<<endl;
	}
	return 0;
}

bool brackets(string s)
{
	stack<char> st;
	char ch;
	for(int i = 0;i < s.size();i++)
	{
		switch (s[i])
		{
			case '(':st.push('(');break;
			case '[':st.push('[');break;
			case '{':st.push('{');break;

			case ')':
			{
				if(st.empty())
					return false;
				else
				{
					ch = st.top();
					if(ch == '(')
					{
						st.pop();
						break;
					}
					else 
						return false;
				}
			}

			case ']':
			{
				if(st.empty())
					return false;
				else
				{
					ch = st.top();
					if(ch == '[')
					{
						st.pop();
						break;
					}
					else 
						return false;
				}
			}

			case '}':
			{
				if(st.empty())
					return false;
				else
				{
					ch = st.top();
					if(ch == '{')
					{
						st.pop();
						break;
					}
					else 
						return false;
				}
			}
			default: 
				break;
		}
	}
	if(!st.empty())
		return false;
	
	return true;
}

你可能感兴趣的:(数据结构)