题目:
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
解读:采用压栈的方式来解决问题。
注意点:①判断string的长度,若为单数则返回false
②判断第一个元素,若为右括号则返回false
③在取栈顶元素之前先判断栈不为空。
④检索完毕判断栈,空栈则返回false
代码:
class Solution {
public:
bool isValid(string s) {
stack<char> bracket;
int length = s.length();
if(length % 2 != 0) return false;
if(s[0] != '(' && s[0] != '[' && s[0] != '{') return false;
for(int i = 0; i < length; i++) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{')
bracket.push(s[i]);
else{
if(bracket.size() == 0) return false;
char top = bracket.top();
if(top == '(' && s[i] == ')') {
bracket.pop();
}
else if (top == '{' && s[i] == '}') {
bracket.pop();
}
else if (top == '[' && s[i] == ']'){
bracket.pop();
}
else return false;
}
}
if(bracket.size() != 0) return false;
return true;
}
};
代码: