20. 有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

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

示例 3:

输入: "(]"
输出: false

示例 4:

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

示例 5:

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

============================================

解题思路 : 使用栈思想 , 压入左括号,碰到右括号弹栈对比

为了使算法速度更快,自己用数组实现栈,容量为 s.length()/2 

下面是代码

============================================

class Solution {
    public boolean isValid(String s) {
        int len = s.length();
        if (len%2==1) return false;
        final char[] stack = new char[len/2];
        int stackIdx = stack.length-1;
        int p = -1;
        char[] chars = s.toCharArray();
        for (char cr:chars)
            if (cr == '(' || cr == '[' || cr =='{') {
                if (p==stackIdx)
                    return false;
                stack[++p]=cr;
            }else{
                if (p==-1||!chkCr(stack[p],cr))
                    return false;
                p--;
            }
        return p==-1;
    }
    private boolean chkCr(char p,char cr){
        switch (cr){
            case ')': return p=='(';
            case '}': return p=='{';
            case ']': return p=='[';
            default : return false;
        }
    }
}

很简单的算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值