LeetCode 20. Valid Parentheses
Description
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
Code
- java
import java.util.LinkedList;
class Solution {
public boolean isValid(String s) {
int len = s.length();
if(len % 2 == 1) return false;
LinkedList<Character> list = new LinkedList<Character>();
Character l1 = '(', l2 = '[', l3 = '{';
Character r1 = ')', r2 = ']', r3 = '}';
for(int i = 0; i < len; i++) {
Character ch = s.charAt(i);
if(ch.equals(l1) || ch.equals(l2) || ch.equals(l3)) {
list.add(ch);
} else {
if(list.isEmpty()) return false;
Character ch2 = list.removeLast();
if(ch.equals(r1) && !ch2.equals(l1)) {
return false;
} else if(ch.equals(r2) && !ch2.equals(l2)) {
return false;
} else if(ch.equals(r3) && !ch2.equals(l3)) {
return false;
}
}
}
return list.isEmpty();
}
}
- Official Solution1
- python
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
# The stack to keep track of opening brackets.
stack = []
# Hash map for keeping track of mappings. This keeps the code very clean.
# Also makes adding more types of parenthesis easier
mapping = {")": "(", "}": "{", "]": "["}
# For every bracket in the expression.
for char in s:
# If the character is an closing bracket
if char in mapping:
# Pop the topmost element from the stack, if it is non empty
# Otherwise assign a dummy value of '#' to the top_element variable
top_element = stack.pop() if stack else '#'
# The mapping for the opening bracket in our hash and the top
# element of the stack don't match, return False
if mapping[char] != top_element:
return False
else:
# We have an opening bracket, simply push it onto the stack.
stack.append(char)
# In the end, if the stack is empty, then we have a valid expression.
# The stack won't be empty for cases like ((()
return not stack
Conclusion
- 栈的基本操作
- LinkedList实现了Deque,push和pop都是在队首进行的