题目链接:LeetCode 20. 有效的括号
题意:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
解题思路:
使用栈,如果是左括号,放入栈,如果是右括号,判断栈顶元素跟当前括号是否匹配
class Solution {
public:
bool isValid(string s) {
stack<char> st;
while(!st.empty()) { // 栈初始化
st.pop();
}
for(int i = 0; i < s.size(); i++) {
if(s[i] == '(' || s[i] == '{' || s[i] == '[') { // 左括号入栈
st.push(s[i]);
} else {
if(!st.empty()&&((s[i]==')'&&st.top()=='(')||(st.top()=='{' && s[i] == '}')||(st.top()=='['&&s[i]==']'))) { // 如果匹配pop
st.pop();
} else { // 否则return false
return false;
}
}
}
if(!st.empty()) { // 如果栈里元素不为空,那么就是还有左括号没有被匹配
return false;
}
return true;
}
};