• 20.有效括号(Valid Parentheses)


    题目:

    由于只包含字符的字符串'('')''{''}''['']',确定输入字符串是有效的。

    括号必须关闭以正确的顺序,"()"并且"()[]{}"都是有效的,但"(]""([)]"没有。

    方法一:

    思路:(1)首先将每对括号以键值对的形式添加到HashMap中,其中左半边括号为key,右半边括号为value;

    (2)从给定的字符串s的第一个元素下标开始(即i=0开始),直到s的最后一个元素的下标结束(即i=s.length()-1结束),若第i个元素为左半个括号,则将其压入栈中;

             若第i个元素为右半个括号,若栈为空或者弹出的栈顶元素所应的value值不等于第i个元素,则返回false;否则i++;

    (3)循环执行结束,若栈为空则返回true,否则返回false

    代码:

     1 class Solution {
     2     public boolean isValid(String s) {
     3 
     4         HashMap<Character,Character> hm=new HashMap<Character,Character>();//创建Map用于存放括号
     5         hm.put('(',')');
     6         hm.put('{','}');
     7         hm.put('[',']');
     8         
     9         Stack<Character> S=new Stack<Character>();//创建一个空栈
    10         
    11         //从字符串s的首元素即i=0开始,若s的第i个元素为左半个括号则将其压栈;否则将s的第i个元素与栈顶元素相比较,若不相等则不匹配,否则i++;
    12         for(int i=0;i<s.length();i++){
    13             
    14             if(hm.containsKey(s.charAt(i))){
    15                 
    16                 S.push(s.charAt(i));
    17                 
    18             }else if(S.empty()||hm.get(S.pop())!=s.charAt(i)){
    19                 
    20                 return false;
    21             
    22             }
    23         }
    24         
    25         return S.empty();
    26         
    27     }
    28 }

    方法二:

    代码:

     1 class Solution {
     2     public boolean isValid(String s) {
     3 
     4         Stack<Character> S=new Stack<Character>();
     5         
     6         for(char c:s.toCharArray()){
     7             
     8             if(c=='('){
     9                 
    10                 S.push(')');
    11                 
    12             }else if(c=='{'){
    13                 
    14                 S.push('}');
    15                 
    16             }else if(c=='['){
    17             
    18                 S.push(']');
    19             
    20             }else if(S.empty()||S.pop()!=c){
    21             
    22                 return false;
    23             
    24             }
    25             
    26         }
    27         
    28         return S.empty();
    29         
    30     }
    31 }
  • 相关阅读:
    python中常用的模块二
    python中常用的模块一
    python类与类的关系
    python类的成员
    关于python的面向对象
    python内置函数2
    python内置函数
    python fileinput模块
    python生成器
    python 迭代器
  • 原文地址:https://www.cnblogs.com/xuzhiyuan/p/7650990.html
Copyright © 2020-2023  润新知