[Leetcode] Valid Parentheses
问题:
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.
Solution:
这个题比较简单。首先设置一个栈,用于存放尚未匹配的左括号。然后从左到右依次扫描字符串中的字符,如果该字符是左括号,那么需要后面的右括号来匹配,因
此将它入栈;如果是右括号并且栈非空同时栈顶的字符与之匹配,那么它们可以互相消解,将栈顶字符出栈,继续扫描后面的字符,否则可判定字符串不是
valid的。如果字符串中的字符都扫描完了,而栈中还有字符,则可判定字符串不是valid的,否则就是valid的。
Java代码如下:
1 public class Solution { 2 public boolean isValid(String s) { 3 Deque<Character> stack = new LinkedList<>(); // 这里避免使用遗留类Stack,而用推荐的Deque来表示栈 4 Map<Character, Character> map = new HashMap<>(); // 使用Map建立左右括号之间的映射,方便判断左右括号是否匹配 5 map.put(')', '('); 6 map.put(']', '['); 7 map.put('}', '{'); 8 for(int i = 0; i < s.length(); i++) { 9 char c = s.charAt(i); 10 if(c == '(' || c == '[' || c == '{') { // 如果是左括号 11 stack.addFirst(c); 12 }else if(c == ')' || c == ']' || c == '}') { // 如果是右括号 13 if(stack.size() == 0 || map.get(c) != stack.removeFirst()) { 14 return false; 15 } 16 }else { // 如果是左右括号以外的字符 17 return false; 18 } 19 } 20 return stack.size() == 0; 21 } 22 }