[Leetcode][020] Valid Parentheses (Java)

题目在这里: https://leetcode.com/problems/valid-parentheses/

【标签】Stack; String

【个人分析】这个题应该算是Stack的经典应用。先进后出 ( FILO) 的结构: 先来的左边括号跟后面的右边括号相匹配。

【代码解释】创建一个栈,如果遇到的是 '{', '(', '[', 就压到栈里面去,留着跟后面遇到的后边括号匹配。如果遇到了'}', ']', ')',首先看看栈里面 是不是空,里面有没有匹配的部分。

【一些心得】我在别人那儿看到一个很好的方法,可以通过增加一个全局map,来增加代码的扩展性: 假如还有其他类型的括号,直接加到map就可以。这样也可以使得代码简洁很多。

 1  /** add a global map to make code to be
 2      *  more extensible and more concise */
 3     @SuppressWarnings("serial")
 4     private static final Map<Character, Character> parentheseMap = 
 5             new HashMap<Character, Character>() {{
 6             put('(', ')');
 7             put('{', '}');
 8             put('[', ']');
 9         }
10     };
11 
12     public boolean isValid(String s) {
13         int len = s.length();
14         if (len % 2 != 0) {
15             // for string of odd-number length, return false immediately 
16             return false;
17         }
18         Stack<Character> lefts = new Stack<Character>();
19         for (char ch : s.toCharArray()) {
20             if (parentheseMap.containsKey(ch)) {
21                 lefts.push(parentheseMap.get(ch));
22             } else {
23                 // for '}', ']', ')', 
24                 // return false if nothing left or not matching
25                 if ( lefts.isEmpty() || lefts.pop() != ch ) {
26                     return false;
27                 }
28             }
29         }
30         return lefts.empty();
31     }

 

posted @ 2015-05-07 04:00  StevenCooks  阅读(150)  评论(0编辑  收藏  举报