比如有"({{()}})"这样一个字符串,我们现在要判断它括号是否能正常匹配。
入栈顺序为’(’,’{’,’{’,’(’。
我们实际入栈的时候,会遵循这样的原则:
如果检测到时’(‘就让’)‘入栈,如果是’{‘就让’}‘入栈,如果是’[‘就让’]'入栈
为什么这样做呢?为什么不检测到 ‘(’ 就让 ‘(’ 入栈呢?
比如: 现在扫描到了第二个 ’(' 了,那么下一个就应该扫描 ’)' 了。
若入栈的是 ’)' 就可以直接判断二者是否相等。
看见栈里面的’)‘其实就是看见了’(’。
若相等就直接Pop就就行了。
如果入栈是入的是’(’,那还要在进行多一次判断。
比较麻烦。
#include <stack>
#include <iostream>
using namespace std;
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() || s[i] != st.top()) return false;
else st.pop();
}
//若最后st栈为空,说明匹配成功
return st.empty();
}
};