给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
class Solution {
public:
bool isValid(string s) {
int n=s.size();
if (n % 2)
return false;
stack<char> st;
for (int i = 0; i < n; i++) {
if (s[i] == '(' || s[i] == '{' || s[i] == '[')
st.push(s[i]);
else {
if (!st.empty()) {
if (s[i] == ')' && st.top() == '(' ||
s[i] == '}' && st.top() == '{' ||
s[i] == ']' && st.top() == '['){
st.pop();
continue;
}
}
return false;
}
}
return st.empty() ? true : false;
}
};
栈的基本题型,基本思路为循环字符串,当遇到左括号入栈,遇到右括号则判断是否与栈顶元素匹配,若匹配则将栈顶左括号取出,若不匹配则直接终止,当整个字符串循环结束后以栈内元素是否为空来判断匹配结果。