括号匹配问题

LeetCode 括号匹配

问题描述:给定一个字符串s只包含字符'(', ')', '{', '}', '['and']'的字符串,确定输入字符串是否有效。

如何判定有效:

1. 开括号必须由相同类型的括号封闭。
2. 左括号必须以正确的顺序关闭。

示例1:

输入: s = "()"
输出: true

示例2:

输入: s = "()[]{}"
输出: true

示例3:

输入: s = "(]"
输出: false

示例4:

输入: s = "([)]"
输出: false

示例5:

输入: s = "{[]}"
输出: true

约束:

  • 1 <= s.length <= 104
  • s仅由括号组成'()[]{}'

分析:

该问题是一个括号匹配问题,针对该问题我们采用的存储方法是栈。因为括号分左右,所以我们有两种思路。第一种,我们把做左括号放入栈中,用右括号进行匹配,如果匹配到就把左括号出栈,最后查看栈中元素总数是否为0,如果为0,我们就返回true,反之返回false。另一种思路为我们把右括号入栈,用左括号进行匹配,后面与第一种一致。
本次我采用的是第一种方法,在该算法中需要注意的是,当有括号没有匹配到左括号的时候就要停止遍历,并返回false。

代码:

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<Character>();
		for (int i = 0; i < s.length(); i++) {
			if((s.charAt(i)=='(')||(s.charAt(i)=='[')||(s.charAt(i)=='{')) {
				stack.push(s.charAt(i));
			}
			if((s.charAt(i)==')')||(s.charAt(i)==']')||(s.charAt(i)=='}')) {
				if(stack.empty()) {
					return false;
				}
				if((stack.peek()=='(' && s.charAt(i)==')')||(stack.peek()=='[' && s.charAt(i)==']')||(stack.peek()=='{' && s.charAt(i)=='}')) {
					stack.pop();
				}else{
                    return false;
                }
			}
		}
		if(stack.empty()) {
			return true;
		}
        return false;
    }
}

本文作者:不期而遇y
版权声明:未经授权禁止使用,转载请说明出处!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值