数据结构之栈的应用:括号匹配问题

上课的代码我修改了下,类名也不是Client了,注意下,另外将字符串修改为从键盘输入,而且加了个辅助函数判定匹配问题。当然需要用到顺序栈,栈的接口代码,该部分代码参见百度云课程资源http://yun.baidu.com/share/link?shareid=3770451811&uk=1583175585
package mystudy.datastruct;

import java.util.Scanner;

public class BraceMatch {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一段包含各种左右括号的字符串用以判断是否括号匹配");
		String str = sc.nextLine();
		BraceMatch bm = new BraceMatch();
		if (bm.validateMatch(str))
			System.out.println(str + "中的各种括号是匹配的");
		else
			System.out.println(str + "中的各种括号是不匹配的");
	}

	private boolean validateMatch(String str) {
		IStack stack = new SeqStack();
		char currentChar;// 当前字符
		char popupChar;// 出栈字符
		int len = str.length();
		for (int i = 0; i < len; i++) {
			currentChar = str.charAt(i);
			if (currentChar == '(' || currentChar == '[' || currentChar == '{') {
				stack.push(currentChar);//字符入栈
			} else if (currentChar == ')' || currentChar == ']'
					|| currentChar == '}') {
				if (stack.isEmpty()) { // 比如输入的字符串为"(1-3)*{(5+4)/4}]"
					System.out.println("左括号少于右括号");
					return false;
				} else {
					popupChar = (char) stack.pop();
					//比如出栈元素为‘[’,当前元素为'}',那就不匹配,这里借助一个辅助函数做判定
					if (!isMatch(popupChar, currentChar)) {// 比如输入的字符串为"{(1-3)*[(5+4)/4}]"
						System.out.println("左括号的类型和右括号的类型不匹配");
						return false;
					}
				}
				// 其他字符,不做任何处理
			}
		}

		if (!stack.isEmpty()) {// 比如输入的字符串为"[(1-3)*{(5+4)/4}"
			System.out.println("左括号多于右括号");
			return false;
		} else {
			return true;
		}
	}

	private boolean isMatch(char c1, char c2) {
		if (c1 == '(' && c2 == ')')
			return true;
		else if (c1 == '[' && c2 == ']')
			return true;
		else if (c1 == '{' && c2 == '}')
			return true;
		else
			return false;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值