码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Valid Parentheses

时间:2015-07-07 22:24:35      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

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.

方法一、找到第一个右括号,然后和左边的字符一起借助哈希表映射,判断是否成对。

 1     public static boolean isValid(String s) {
 2         if(s.length()<2 || s.length()%2==1)
 3             return false;
 4         Map<Character,Integer> map=new HashMap<Character,Integer>();
 5         map.put(‘(‘, 1);
 6         map.put(‘)‘, 9);
 7         map.put(‘{‘, 2);
 8         map.put(‘}‘, 8);
 9         map.put(‘[‘, 3);
10         map.put(‘]‘, 7);
11         boolean result=true;
12         for(int i=0;i<s.length();i++)
13         {
14             if(map.get(s.charAt(i))<5)
15             {
16                 if(i==s.length()-1)//防止越界,也没找到,最后一个肯定不是右括号
17                     return false;
18                 continue;
19             }
20             if(i-1<0)//排除出现}{的情况
21                 return false;
22             if(map.get(s.charAt(i-1))+map.get(s.charAt(i))==10)
23             {
24                 s=s.substring(0, i-1)+(i+1<s.length()?s.substring(i+1, s.length()):"");
25                 if(s.length()!=0)
26                 {
27                     result=isValid(s);
28                 }
29                 break;
30             }
31             else
32             {
33                 result=false;
34             }
35             
36         }
37         return result;
38     }

方法二,栈

    public boolean isValid(String s) {
        if(s.length()<1 || s.length()%2!=0)
            return false;
        Stack<Character> stack=new Stack<Character>();
        for(int i=0;i<s.length();i++)
        {
            if(s.charAt(i)==‘{‘ || s.charAt(i)==‘[‘ || s.charAt(i)==‘(‘)
            {
                stack.push(s.charAt(i));
                if(i==s.length()-1)//最后一个
                    return false;
                continue;
            }
            switch (s.charAt(i)) {
            case ‘}‘:
                if(stack.size()==0)
                    return false;
                Character c1=stack.pop();
                if(c1!=‘{‘)
                {
                    return false;
                }
                break;
            case ‘)‘:
                if(stack.size()==0)
                    return false;
                Character c2=stack.pop();
                if(c2!=‘(‘)
                {
                    return false;
                }
                break;
            case ‘]‘:
                if(stack.size()==0)
                    return false;
                Character c3=stack.pop();
                if(c3!=‘[‘)
                {
                    return false;
                }
                break;
            }
        }
        return true;
    }

 

LeetCode Valid Parentheses

标签:

原文地址:http://www.cnblogs.com/maydow/p/4628525.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!