题目:
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.
堆栈。
c++版:
class Solution {
public:
bool isValid(string s) {
map<char, char> brackets;
brackets['('] = ')';
brackets['{'] = '}';
brackets['['] = ']';
stack<char> order;
for(int i = 0; i < s.length(); i++) {
if(s[i] == '(' || s[i] == '{' || s[i] == '[')
order.push(s[i]);
else {
if(order.size() == 0)
return false;
if(s[i] != brackets[order.top()])
return false;
order.pop();
}
}
if(order.size() == 0)
return true;
return false;
}
};
Java版:
public class Solution {
public boolean isValid(String s) {
Map<Character, Character> brackets = new HashMap();
brackets.put('(', ')');
brackets.put('{', '}');
brackets.put('[', ']');
Stack order = new Stack();
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '[')
order.push(s.charAt(i));
else {
if(order.size() == 0)
return false;
if(s.charAt(i) != brackets.get(order.peek()))
return false;
order.pop();
}
}
if(order.size() == 0)
return true;
return false;
}
};
Python版:
class Solution:
# @return a boolean
def isValid(self, s):
brackets = {"{":"}", "[":"]", "(":")"}
stack = []
for i in range(0, len(s)):
if s[i] == '{' or s[i] == '(' or s[i] == '[':
stack.append(s[i])
else:
if len(stack) == 0:
return False
if brackets[stack[len(stack)-1]] != s[i]:
return False
stack.pop()
if len(stack) == 0:
return True
return False