20. Valid Parentheses
Easy
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
package leetcode.easy; import java.util.HashMap; import java.util.Stack; public class ValidParentheses { // Hash table that takes care of the mappings. private HashMap<Character, Character> mappings; // Initialize hash map with mappings. This simply makes the code easier to // read. public ValidParentheses() { mappings = new HashMap<Character, Character>(); mappings.put(')', '('); mappings.put('}', '{'); mappings.put(']', '['); } public boolean isValid(String s) { // Initialize a stack to be used in the algorithm. Stack<Character> stack = new Stack<Character>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); // If the current character is a closing bracket. if (this.mappings.containsKey(c)) { // Get the top element of the stack. If the stack is empty, set // a dummy value of '#' char topElement = stack.isEmpty() ? '#' : stack.pop(); // If the mapping for this bracket doesn't match the stack's top // element, return false. if (topElement != this.mappings.get(c)) { return false; } } else { // If it was an opening bracket, push to the stack. stack.push(c); } } // If the stack still contains elements, then it is an invalid // expression. return stack.isEmpty(); } @org.junit.Test public void test() { String s1 = "()"; String s2 = "()[]{}"; String s3 = "(]"; String s4 = "([)]"; String s5 = "{[]}"; System.out.println(isValid(s1)); System.out.println(isValid(s2)); System.out.println(isValid(s3)); System.out.println(isValid(s4)); System.out.println(isValid(s5)); } }