栈应用-括号匹配
问题描述
给定一个字符串,里边可能包含“()”、“{}”、“[]”三种括号,请编写程序检查该字符串的括号是否成对出现。
输出:
Yes:代表括号成对出现并且嵌套正确。
No:未正确使用括号字符。
思路
消去一对紧邻的左右括号,不影响全局的匹配判断
反复迭代:凡是遇到(
, {
, [
则入栈;凡是遇到)
, }
, ]
则出栈,当还没迭代完,栈就为空, 说明右括号多余或者)
与之匹配的不是(
或者当迭代完,栈中还有元素剩余这三种情况都是匹配失败,当迭代完,栈为空,说明括号都匹配成功
代码实现
bool paren(string s)
{
stack<char> st;
int k = s.length();
for (int i = 0; i < s.length(); i++)
{
switch (s[i])
{
case '(':
st.push(s[i]);
break;
case '[':
st.push(s[i]);
break;
case '{':
st.push(s[i]);
break;
case ')':
if (st.empty())
return false;
else if (st.top() == '(')
st.pop();
else
return false;
break;
case ']':
if (st.empty())
return false;
else if (st.top() == '[')
st.pop();
else
return false;
break;
case '}':
if (st.empty())
return false;
else if (st.top() == '{')
st.pop();
else
return false;
break;
}
}
return st.empty();
}
int main()
{
string s;
cin >> s;
if (paren(s))
{
cout << "yes" << endl;
}
else
{
cout << "no" << endl;
}
system("pause");
return 0;
}
运行结果: