题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
通常利用栈去实现该功能,一般都是左右括号进行匹配,遍历括号组,若是左括号则把右括号压入栈,若是右括号则与栈顶进行匹配,如果匹配不上就false,如果匹配上了就把栈顶出栈,最后最后最后还要判断是否有残留的括号!!!
cpp
class Solution {
public:
bool isValid(string s) {
if (s.size() % 2 != 0) return false;
stack<char> 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();
}
};