[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 }

 

posted @ 2015-11-27 14:04  爪哇国臣民  阅读(156)  评论(0编辑  收藏  举报