zoukankan      html  css  js  c++  java
  • [LeetCode]Valid Parentheses

    1、题意                     

    给定一个字符串,只包含字符'(', ')', '{', '}', '[' 和 ']',确定输入字符串是否有效。
    括号必须以正确的顺序关闭,“()”和“( )[ ]{ }”都是有效的,但“( ]“和“([ )]”不是。

    2、解题思路                                

    将给定的字符串使用对应方法转换为一个字符数组,进行逐个遍历判断是否为左括号,如果是则使用push方法进行入栈,

    如果不是进行值栈是否为空的判断,如果不为空,说明值栈中存在某一种左括号,则使用pop方法进行出栈,进行对比。

    如果不能理解我表达的意思,可以自己参看代码进行理解。 

    3、注意                                   

    比较字符是用==,比较String是用equal(),因为String是引用类型,值相等但是地址可能不等。代码如下:

     1 public static boolean isParen(String s ){
     2         if (s.length() == 0 || s.length() % 2 == 1){
     3             return false;
     4         }
     5         Stack<Character> stack = new Stack();
     6         for(int i = 0;i < s.length(); i++){
     7             if(s.charAt(i) == '{' || s.charAt(i) == '[' || s.charAt(i) == '('){
     8                 stack.push(s.charAt(i));
     9             }else{
    10                 if(stack.size()==0){
    11                     return false;
    12                 }
    13                 Character top = stack.pop();
    14                 if(s.charAt(i) == '}'){
    15                     if(top == '{'){
    16                         return true;
    17                     }else{
    18                         return false;
    19                     }
    20                 }else if(s.charAt(i) == ']'){
    21                     if(top == '['){
    22                         return true;
    23                     }else{
    24                         return false;
    25                     }
    26                 }
    27                 else if(s.charAt(i) == '('){
    28                     if(top == ')'){
    29                         return true;
    30                     }else{
    31                         return false;
    32                     }
    33                 }
    34             }
    35         }
    36         return stack.size() == 0;
    37     }

    4 、总结:                                

      在写代码的时候忽略了其中栈是否为空的判断,出现异常java.util.EmptyStackException,在代码红色标记处进行添加得以解决,每一道leetcode题的思路都需要自己动手去写,去琢磨,那些有时候看似比较简单的问题,在你动手去编码的时候总会有一些细节被遗漏。思维的严谨性对于一个优秀的程序员来说非常重要。通过一道一道的算法题对自己编码技术,思维能力的不断提升。修得内功,内外结合,方能成为武林高手。每一道算法题都是对自己内功的一个提升。

    安静男孩
  • 相关阅读:
    arm基础知识1
    安装Yellowfin报错——No such file or directory: '/tmp/pip-build-jykvuD/YellowFin/README.md'
    下载kaggle数据集,验证手机号
    调参必备---GridSearch网格搜索
    sklearn.metrics.roc_curve
    & | and or
    16个推荐系统开放公共数据集整理分享
    tensorflow ConfigProto
    python __future__ 使用
    tf idf公式及sklearn中TfidfVectorizer
  • 原文地址:https://www.cnblogs.com/xishaohui/p/7598953.html
Copyright © 2011-2022 走看看