Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: “()” Output: true
Example 2:
Input: “()[]{}” Output: true
Example 3:
Input: “(]” Output: false
Example 4:
Input: “([)]” Output: false
Example 5:
Input: “{[]}” Output: true
这道题容易想到用栈来设计,如果检索到的字符是左括号,则压栈,如果检索到的字符是右括号,则和栈顶元素比较是否是对应的右括号,如果是则弹出栈顶元素,否则输出false。最后如果栈里还有元素,也是false。
class Solution {
public:
bool isValid(string s) {
int len = s.length();
vector<char> stack;
for (int i=0; i<len; i++){
if(s[i] == '(' || s[i] == '[' || s[i] == '{' )
stack.push_back(s[i]);
else{
if(stack.empty())
return false;
char top = stack[stack.size() - 1];
if(s[i] == ')' && top != '(')
return false;
if(s[i] == ']' && top != '[')
return false;
if(s[i] == '}' && top != '{')
return false;
stack.pop_back();
}
}
if(stack.size() > 0 )
return false;
return true;
}
};
一开始没想到会有stack.empty()
也就是]})
这类情况,而且这句判断语句得放在最前面,否则指针top
就咩有意义,指出界了,报错:RuntimeError
。