java有效的括号—栈解法详解

题目

在这里插入图片描述

大致思路

  1. 新建一个长度为s.length()的字符数组,和一个变量top来记录这个数组的当前个数,初始化为-1。表示没有任何元素
  2. 遍历字符串s的每一个字符,如果这个字符是括号的左半边,那就存入数组
  3. 如果是括号的右半边,那就有两种情况,①.stack数组中没有元素,那就不符合题意,return false ②.和stack栈顶元素匹配,如果是同一种括号,就匹配成功,stack出栈,top–,相反则返回false; 如下图
    在这里插入图片描述

4.遍历完字符串之后,还需要判断top是不是-1,如果是有效的括号"[ { ( ) } ]",那么一个一个匹配之后,top一定会回到-1 ,再举个反例,如果是"( { [ { (“或”( { [ ]"这种情况,循环结束后top不是-1,仍有元素,则false

GIF演示

接下来我们举个例子画个gif
例子:s = “( { [ ] } )”
在这里插入图片描述

代码

class Solution {
	//返回右括号的另一半
    public char match(char ch) {
        if (ch == '}') {
            return '{';
        } else if (ch == ']') {
            return '[';
        } else {
            return '(';
        }
    }
    public boolean isValid(String s) {
        char[] stack = new char[s.length()];//新建数组
        int top = -1; //表示栈顶,没有元素即-1
        //开始遍历
        for (int i = 0; i < s.length(); i++) {
            char tmp = s.charAt(i); //取出这个字符
            if (tmp == '{' || tmp == '[' || tmp == '(') {
                stack[++top] = tmp; //如果是左括号,就直接入栈
            } else {  //如果是右括号
                char toMatch = match(tmp);   //拿到右括号的另一半
                //如果数组里没有元素和有括号匹配,或与栈顶元素不匹配
                if (top == -1 || stack[top] != toMatch) {
                    return false;  
                } else {
                    top--;
                }
            }
        }
        return top == -1;
    }
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

答辣喇叭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值