LeetCode(20) - Valid Parentheses

  题目要求是这样,给你一串只包含符号的字符串,看看这串符号合不合法。怎么算合法呢?"()()()"和"[{}]()"都算是合法,但"([)]"就不合法了。

  思路很简单,通过上面举的例子,我们可以看出来,一个右括号的出现,其合不合法,取决于最后出现的的左括号能不能对应起来,如果不能对应(如"("和"]"),则返回false。而最后出现的左括号,最优先要被判断,所以只是一个典型的后进先出的例子,这样我们就很容易想到一个后进先出的数据结构——栈。

  代码如下:

  

 1 public class Solution {
 2     public boolean isValid(String s) {
 3         Stack<Character> stack = new Stack<Character>();
 4         for (int i = 0; i < s.length(); i++) {
 5             char c = s.charAt(i);
 6             if (c == '(' || c == '[' || c == '{') {
 7                 stack.push(c);
 8             }
 9             else {
10                 //注意判断stack是否为空。
11                 if (stack.isEmpty()) return false;
12                 char c1 = getAccording(c);
13                 if (c1 != stack.pop()) return false;
14             }
15         }
16         //如果stack不为空,说明还有左括号留下来。
17         return stack.isEmpty();
18     }
19     
20     private char getAccording(char c) {
21         char c1 = ' ';
22         switch (c) {
23             case ')': c1 = '('; break;
24             case ']': c1 = '['; break;
25             case '}': c1 = '{'; break;
26         }
27         return c1;
28     }
29 }

 

posted @ 2016-03-13 15:27  可普CS之家  阅读(181)  评论(0编辑  收藏  举报