题目描述:
给定一个括号字符串序列和一个整型数字,如果括号匹配合法则输出“Y”,否则输出“N”
例如:
输入:“(()()” 5
输出:N
输入:“(()())” 6
输出:Y
输入:"((a))" 5
输出:Y
解决思想:
- 运用栈结构,当字符为左括号或者字符时入栈
- 当字符为右括号且栈顶元素为左括号时出栈
- 当栈顶元素为字符时,则一直循环出栈直到栈顶元素为括号
- 如果最终栈为空则匹配合法,否则不合法
!注意:
在每次判断栈顶元素时必须要保证栈不为空,否则当字符串是"(()))"时会造成程序运行错误
代码:
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{
string s;
int n;
while (cin >> s >> n)
{
stack<char> st;
for (int i = 0; i < n; ++i)
{
if (s[i] == '(')
st.push(s[i]);
else if (s[i] == ')')
{
if (!st.empty())
{
while (st.top() != '(')
{
st.pop();
}
if (st.top() == '(')
{
st.pop();
}
else
cout << "N" << endl;
}
else
{
cout << "N" << endl;
return 0;
}
}
else
st.push(s[i]);
}
if (st.empty())
cout << "Y" << endl;
else
cout << "N" << endl;
}
}