【leetcode刷题笔记】20.有效的括号“( ),{ },[ ]”

题目描述: 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true

解题思路:
1.在此之前我已经能匹配单个小括号(),而这题还加上了中括号和花括号的匹配,但是解题的思路还是一样的。
2.首先,遍历字符串的每一个字符,并判断当前字符
3.当前字符如果是左括号就进栈,
4.当前字符如果是右括号则出栈,并判断出栈的元素是否能和当前元素相匹配,比如假如当前元素是"[ “,如果出栈元素不是” ]",就返回false,同时也要ps:
注意一点
java自带的Stack类,pop出栈方法如果栈中没有元素是不会返回null的,而是会报空栈异常

在这里插入图片描述code:

class Solution {
    public boolean isValid(String s) {
       Stack<String> stack= new Stack<String>();
       String ch1;
       //遍历字符串的每一个字符
       for(int i=0;i<s.length();i++){
           String ch=s.charAt(i)+"";
           //左括号则入栈
           if("(".equals(ch) || "{".equals(ch) || "[".equals(ch)){
               stack.push(ch);
           }
           //遇到右括号则出栈,判断出栈元素是否和右括号匹配
           else{
               switch(ch){
                   case ")": 
                        if(stack.isEmpty()){
                            return false;
                        } 
                         ch1=stack.pop();
                        if( ch1==null || !ch1.equals("(")){
                            return false;
                        }
                        break;
                   case "}":
                         if(stack.isEmpty()){
                            return false;
                        } 
                         ch1=stack.pop();
                        if(ch1==null || !ch1.equals("{")){
                            return false;
                        }
                        break;
                   case "]":
                        if(stack.isEmpty()){
                            return false;
                        } 
                           ch1=stack.pop();
                        if(ch1==null ||!ch1.equals("[")){
                             return false;
                        }
                        break;
                   default :break;
               }
           }
           
       }
             //判断栈内是否还有剩余元素,如果有,则不是有效字符串
          
               return stack.isEmpty();
       
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值