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题的思路都需要自己动手去写,去琢磨,那些有时候看似比较简单的问题,在你动手去编码的时候总会有一些细节被遗漏。思维的严谨性对于一个优秀的程序员来说非常重要。通过一道一道的算法题对自己编码技术,思维能力的不断提升。修得内功,内外结合,方能成为武林高手。每一道算法题都是对自己内功的一个提升。

    安静男孩
  • 相关阅读:
    MY_0003:设置界面显示单位
    H5_0024:对于事先无法确定css大小的情况,可以通过JS动态修改
    H5_0023:html页面禁止放大缩小页面
    MY_0002:导出单位设置
    MY_0001:添加命令到自定义工具栏
    H5_0020:判断安卓苹果平台
    Web_0003:关于PHP上传文件大小的限制
    H5_0019:JS中定义json结构
    H5_0018:z-index失效的原因
    H5_0017:通过元素自定义属性值获取元素对象,并获取属性值
  • 原文地址:https://www.cnblogs.com/xishaohui/p/7598953.html
Copyright © 2011-2022 走看看