【栈】 括 号 匹 配 (LeetCode)

问题描述

在这里插入图片描述
括号匹配可以说是栈应用的经典问题了 但是今天刷到了一个很巧妙的方法(只是提供另一种思路)
有点兴奋 想记录下来
先说一下以前的解法吧

解法一

栈——括号匹配问题一共就有三种情况
(1)右括号数量多
(2)左右括号不匹配
(3)左括号数量多
首先: 建栈
依次扫描字符串内字符,如果是左括号——将该字符入栈
如果是右括号,出栈判断是否匹配
此时栈是空的返回false 说明右括号多了
不匹配返回false 匹配则继续
如果扫到其他字符返回false(视情况而定 你也可以选择扫到括号以外字符就略过直接扫下一个))
直到循环结束
如果栈不为空 说明左括号多了返回false
若此时栈也空了 返回true

上面的就相当于粗糙的伪代码了吧(这里手懒 就先不打了)【手动狗头】

解法二

任然是上述三种情况 (1)(2)(3)
只是对问题的处理不同
依次扫描字符串内字符
如果是左括号——将与其对应的右括号入栈
如果是右括号——判断和出栈字符是否相同
不相同或栈空返回false
直到循环结束
如果栈不为空 说明左括号多了返回false
若此时栈也空了 返回true

与解法一主要不同是:在面对多类括号问题时()、[]、{} 扫描到右括号后,出栈比较不用再分别判断了
写的行数能少一点
不说废话 直接上代码通俗易懂

import java.util.*;
import java.util.Stack;

public class Solution {
    public boolean isValid (String s) {
        Stack<Character> sta = new Stack<>();//建栈
        for(char r : s.toCharArray()){  //遍历字符串
            if(r=='(') sta.push(')'); 
            else if(r=='[') sta.push(']');
            else if(r=='{') sta.push('}');
            else if(sta.isEmpty()||sta.pop()!=r) 
                return false;            //右括号多了
             //这里没有处理异常字符
             //可以在前面加上 if(当前字符不等于()、[]、{})  continue;  之类的
        }
        return sta.isEmpty();  //左括号多的情况 和上面说的意思一样的
    }
}

以上!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值