leetcode20. 有效的括号

1.题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: “()”
输出: true
示例 2:

输入: “()[]{}”
输出: true
示例 3:

输入: “(]”
输出: false
示例 4:

输入: “([)]”
输出: false
示例 5:

输入: “{[]}”
输出: true
2.思考
a)首先是用什么数据结构,这道题的解法只有一个就是用栈的方式,stack
b)如果是左括号,就直接push入栈
c)如果是右括号,则将栈pop出栈,判定是否与这个右括号匹配,若匹配则继续,若不匹配,则返回false
d)用什么数据结构进行匹配,这里用map即可
3.java代码

class Solution {
     public boolean isValid(String s) {
        if(s.length()==0 || s==null)
        {
            return true;
        }
        Stack<Character> stack=new Stack<>();
        Map<Character,Character> map=new HashMap<>();
        map.put(')','(');
        map.put('}','{');
        map.put(']','[');
        for(Character c:s.toCharArray())
        {
            if(c=='{' || c== '[' || c=='('){
                stack.push(c);
            }
            else if( stack.size() ==0 ||stack.pop() != map.get(c))  return false;
        }
        return stack.size() == 0;
    }
}

4.易错点分析
else if( stack.size() ==0 ||stack.pop() != map.get©) return false;
这一句中,很多人忘记添加stack.size() ==0 这一个条件,可以试想如果给的输入字符串为"}}}}"全是右括号的情况,
那么在第一个右括号出现的时候,就应该判定为错误了,因为他的前面没有与他匹配的左括号。
一定记住,左括号一定在有右括号前面
5.扩展
如果让你检查 XML 标签是否闭合如何检查, 更进一步如果要你实现一个简单的 XML 的解析器,应该怎么实现?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值