java使用栈实现括号匹配(很特别的一种方法)

本文介绍了一种独特的Java栈方法来解决括号匹配问题。不同于常规的左括号入栈,该方法在遇到左括号时将对应的右括号入栈。在遍历过程中,若遇到右括号,检查栈不为空且栈顶元素与右括号匹配,否则返回错误。最终,栈为空表示匹配成功,否则匹配失败。附带具体代码实现和测试结果。

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

平时刷题的时候会经常遇到一个题目,就是给你一串括号有大括号,中括号,小括号,判断给出的括号能否匹配,这种题目大家第一印象肯定是用栈来实现,基本的思路是判断如果是左边括号入栈,如果是右边括号出栈,最后判断栈是否为空。

以前在Leetcode上面刷题的时候遇到这道题,当时我也是按照上面这种常规思路来写的,后来在论坛里面看到有一个大神提供的解法,感觉思路很不错,在这里就把他记录下来。具体思路如下:

遍历字符串,判断如果是左括号,那么将其对应的右括号入栈,主要这里不是将左括号入栈,举个例子比如当前字符为'{'那么就将'}'入栈;当遇到右括号的时候,判断两个条件:

1、栈不为空;

2、栈顶元素出栈,并且等于当前字符相等。

只要这两个条件有一个不满足,那么直接返回false。条件1如果不满足,也是就是栈为空,那么表示右括号比左括号的数量要多自然不能匹配;如果出栈的字符和当前的右括号不等,也表示不能匹配成功。

最后判断栈是否为空,为空表示刚好匹配,不为空表示左括号比右括号多。具体代码实现如下:

package cn.cqupt.leetcode.string;

import java.util.Stack;
import java.util.Scanner;


public class ParenthesisMatching{

    public static boolean isVaild(String s){
		Stack<Character> stack = new Stack<Character>();
		for (char c : s.toCharArray()) {
			if (c == '(')
				stack.push(')');
			else if (c == '{')
				stack.push('}');
			else if (c == '[')
				stack.push(']');
			//遍历过程中如果stack为空,证明左符号少于右符号
			else if (stack.isEmpty() || stack.pop() != c)
				return false;
		}
		//遍历完成以后如果stack不为空,那么证明左符号多于右符号
		return stack.isEmpty();
	}

    public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while(in.hasNext()){
			String line = in.nextLine();
			boolean res = isVaild(line);
			System.out.println(res);
		}
	}

}

 测试结果:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值