括号匹配问题——栈的应用

括号匹配问题

转自黑马教程

问题描述:

给定一个字符串,里边可能包含“()”和其它字符,编写程序检查字符串中的小括号是否成对出现。
例如:
	"(上海)(长安)":正确匹配
	"上海((长安))":正确匹配
	"上海(长安(北京)(深圳)南京):正确匹配
	"上海(长安))":错误匹配
	"((上海)长安":错误匹配

解题思路

利用栈来解决。遍历字符串,如果遇到"(",则将其压入栈中,如果遇到")",则做一个弹栈的动作,检查弹出的元素是否是"(",如果是则匹配成功,如果是null,则匹配错误。如果字符串遍历完,栈非空,则证明"("多,即括号不成对出现。

代码段

public class BracketsMatchTest{
	public static void main (String[] args{
		String str = "(上海(长安)())";
		boolean match = isMatch(str);
		System.out.println(str + "中的括号是否匹配" +match);
	}
	public static boolean isMatch(String str){
		Stack<String> chars = new Stack<>();
		for(int i =0;i<str.length;i++){
			String currChar = str.charAt(i) + "";
			if (currChar.equals("(")){
				chars.push(currChar);
			}else if(currChar.equals(")")){
				String pop = chars.pop();
				if (pop==null){
					return false
				}
			}
		}
		if(chars.size() == 0){
			return true;
		}else{
			return false;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值