利用栈后进先出的作用,有效括号必须满足闭合,并且是按正确顺序的闭合,可以把左括号和右括号分成两边进行配对,([{ }]) ,使用迭代器对string s进行遍历, 遇到左括号就入栈, 遇到右括号时,使用&&判断 当前右括号和栈顶的*it 是否配对。
class Solution {
public:
bool isValid(string s) {
bool ret;
stack<char> st;
if (s.empty()) {
return false; // 如果字符串为空,直接返回 false
}
for(auto it=s.begin();it!=s.end();++it)
{
if(*it=='{'||*it=='('||*it=='[')
{
st.push(*it); //如果是前括号就入栈
}
else
{
if(st.empty())
{
return false; //如果前括号都出完了())))或只有右括号)),也返回false
}
if(*it==']'&&st.top()!='[')
{
ret=false; //不匹配就赋值false
break;
}
if(*it==')'&&st.top()!='(')
{
ret=false;
break;
}
if(*it=='}'&&st.top()!='{')
{
ret=false;
break;
}
st.pop();
}
}
ret=st.empty();//遍历完之后 栈空了,说明是有效括号, 栈没空,说明前括号比后括号多
return ret;
}
};