【图解算法】彻底搞懂(括号匹配)——图解带你直击本质

本文深入探讨括号匹配问题,覆盖基本栈方法、多种括号类型处理、括号生成及最长有效括号长度的计算。采用【栈】、【动态规划】、【括号计数】等策略,全面解析括号匹配的算法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 
在这里插入图片描述

 

括号匹配专题

 

你可否记得,当年被【括号匹配】支配的恐惧?

 

>>> 本文先讨论最基本的括号匹配及其经典的【栈】思路
>>> 再分析其变体
>>> 最后是究极变体,从【栈】【动态规划】【括号计数(追赶法)】三种方法切入,彻底理解括号匹配问题
>>>
>>> 记住,所有的方法,归根结底还是从括号字符串的自身特性出发的
>>> 再记住两句话:
>>>		1.【尝试用')'去消去前面的'('>>>		2.【当右括号数量超过左括号时,必然串无效】

 

 

 

经典的栈
在这里插入图片描述

/*
* 经典的【栈】思路
* 
* 遇到'(',就入栈;  遇到')',就出栈
* 扫描过程中,当出栈时发现栈空时,串无效
* 扫描结束后。若栈空,则串有效;如果栈不空,则串有效
*/
public boolean isValid(String s) {
   
	Deque<Character> stack = new ArrayDeque<>();
		
	for(char c : s.toCharArray()) {
   
		if(c == '(') {
   
			stack.push(c);
		}else {
   
			if(stack.isEmpty()) {
   
				return false;
			}else {
   
				stack.pop();
			}
		}
	}
	return stack.isEmpty();
}

 

 

变体1——不止是小括号

思路变体:【经典的栈】 + 【Map】

▊【Q20】(ez) 有效的括号(括号匹配问题)
 
   给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]'的字符串,判断字符串是否有效。
  
有效字符串需满足:
   左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。
 
示例 1:
   输入: “([{}])”
   输出: true
示例 2:
   输入: “([)]”
   输出: false

class Solution {
   
    public boolean isValid(String s) {
   
    	/*
    	* 思路:
    	* 如果是左括号,就毫不犹豫的入栈;
    	* 如果是右括号,不仅要先判断是否栈空,还要判断弹出的左括号是否对应此时的右括号
    	* 
    	* 注:
    	* 1.使用HashMap进行匹配,使得代码和逻辑都更具美感
    	* 2.典型的栈结构问题。由于java 8,9有移除Stack的趋势,因此这里使用双端队列Deque,同样有PushPop特性
    	*/
    	if(s == null || s.length() == 0)	return true;	// leetcode传统艺能,null和0值不说就是true
    	
    	Map<Character, Character> map = new HashMap<>();
    	map.put(')', '(');
    	map.put(']', '[');
    	map
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值