题目思路:有一个由()组成的字符串,问能否在至多移动一个字符的情况下使所有括号完美匹配
思路:先用栈使能匹配的括号全部匹配,如果剩下的是)(的话就可以成功匹配
#include<bits/stdc++.h>
using namespace std;
string s;
int main()
{
int n;
char temp1, temp2;
cin >> n >> s;
if (n % 2 == 1)
cout << "No";
else
{
stack<char> st;
for (int i = 0; i < n; i++)
{
if (s[i] == '(')//左括号直接放入栈
st.push(s[i]);
else if (st.empty())//栈为空使也要先把元素放入栈
st.push(s[i]);
else if (s[i] == ')' && st.top() == '(')//如果括号匹配了,就把栈顶元素弹出
st.pop();
else
st.push(s[i]);
}
if (st.empty())
{
cout << "Yes";
}
else if (st.size() == 2)
{
temp1 = st.top();
st.pop();
temp2 = st.top();
if (temp1 == '(' && temp2 == ')')
cout << "Yes";
else
cout << "No";
}
else
cout << "No";
}
return 0;
}