zoukankan      html  css  js  c++  java
  • 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.

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

     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;
        }
  • 相关阅读:
    random(1)
    django(1)
    python复习
    bootstrap(1)
    jquery(2)
    Jquery(3)
    day17 正则表达式 re模块
    文字笔记
    MATLAB之数学建模:深圳市生活垃圾处理社会总成本分析
    MATLAB之折线图、柱状图、饼图以及常用绘图技巧
  • 原文地址:https://www.cnblogs.com/maydow/p/4628525.html
Copyright © 2011-2022 走看看