Valid Parentheses有效括号匹配。利用栈。

问题描述:给定一个字符串,其中只包含字符‘{’,    '}',    '[',    ']',   '(',    ')'确定如果输入字符串是有效的。
括号必须以正确的顺序排列,“()”和“()[]{ }”都是有效的,   "{",  " {]"等都是无效的。

解题思路:利用栈,如果不是右括号就压入栈中,如果是右括号,就看前一个字符是不是匹配的左括号,如果匹配出栈,接着看后面字符,不匹配则返回false。

 1 public boolean isValid(String s) {
 2             Map<Character,Character> map = new HashMap<>();
 3             map.put('(',')');
 4             map.put('[',']');
 5             map.put('{','}');
 6             Stack<Character> stack = new Stack<>();
 7             for(int i = 0; i < s.length(); i ++)
 8             {
 9                 char curr = s.charAt(i);
10                 if(map.keySet().contains(curr))
11                 {
12                     stack.push(curr);
13                 }
14                 //注意判断空的情况
15                 else if(!stack.empty() && map.values().contains(curr))
16                 {
17                     char pre = stack.peek();
18                     if(map.get(pre)==curr)
19                     {
20                         stack.pop();
21                     }
22                     else
23                     {
24                         return false;
25                     }
26                 }
27                 else
28                 {
29                     return false;
30                 }
31             }
32             return stack.empty();
33         }

 

posted @ 2016-05-30 15:56  32ddd  阅读(169)  评论(0编辑  收藏  举报