首先分析题,有效的括号,也就是要求括号是对称的,可以是整体对称如:{}(),也可以是分别对称, 如:{()}。正确的结果只有这两种情形。所有利用了栈先进后出的思想。
下面以 “ {}()()”为例
创建一个stack
开始遍历字符串;
i= 0 s[i]='{' st输入'}'
i=1 s[i] = '}' 这里执行st.pop(),这就相当于做了比较,因为只有s[i]==st.top(),才会执行这一步,这说明这个括号正确闭合了。之后还是继续重复执行这一步骤。
class Solution {
public:
bool isValid(string s) {
stack<int> st;
for(int i = 0; i< s.size(); i++)
{
if(s[i] == '(') {
st.push(')');
}else if (s[i] == '{'){
st.push('}');
}else if (s[i] == '[') {
st.push(']');
}else if (st.empty() || st.top() != s[i]) {
return false;
}else {
st.pop();
}
}
return st.empty();
}
};