一.要点 (1)利用栈先进后出的特点,当遇到左括号"[","{",""(“时,直接入栈。 (2)当遇到右括号”)","}","]"时,如果此时空的,那么成对的括号一定不能进行匹配,直接返回false即可。 (3)可以出栈的情况,当栈顶的左括号与当前的右括号匹配时,出栈。 (4)遍历过程中出现的其他情况都是错误的。比如栈顶为左括号,当前遍历到也是左括号。 (5)当遍历完成时,如果栈不空,说明还有未进行匹配的左括号,也就意味括号匹配失败,直接返回false即可。 二.代码实现
#include <iostream>
#include <stack>
using namespace std;
bool isValid(string s) {
stack<char> st;
for (auto x : s) {
if (x == '[' || x == '(' || x == '{')
st.push(x);
else if (st.empty())
return false;
else if ( (st.top() == '(' && x == ')') || (st.top () == '[' && x == ']') || (st.top() == '{' && x == '}') )
st.pop();
else
return false;
}
return st.empty();
}
int main() {
string s;
cin >> s;
cout << isValid(s) << endl;
return 0;
}