括号串合法性判断(栈实现)

class Solution {
    public boolean isValid(String s) {
        boolean result = true;
        char[] charsArray = s.toCharArray();
        int stringLength = charsArray.length;
//        长度小于2或者长度不为偶数判定为假
        if (stringLength < 2 || (stringLength & 1) == 1) {
            result = false;
            return result;
        }
        Stack<Character> characterStack = new Stack<>();
        HashSet<Character> leftSet = new HashSet<>();
        HashSet<Character> rightSet = new HashSet<>();
        HashMap pairHashMap = new HashMap<Character, Character>();
        leftSet.add('(');
        leftSet.add('{');
        leftSet.add('[');
        rightSet.add(')');
        rightSet.add('}');
        rightSet.add(']');
        pairHashMap.put(')', '(');
        pairHashMap.put('}', '{');
        pairHashMap.put(']', '[');
//        遍历字符串数组指针
        int pointA = 0;
//        开始遍历字符串数组
        while (pointA != stringLength) {
//            当前指针所指的字符串数组元素
            char nowItem = charsArray[pointA];
//            对nowItem情况三种进行处理:1:开括号、闭括号、其他字符
            if (leftSet.contains(nowItem)) {
                characterStack.push(nowItem);
            } else if (!characterStack.isEmpty() && rightSet.contains(nowItem)) {
                Character topItem = characterStack.pop();
                if (!(pairHashMap.get(nowItem) == topItem))
                    return false;
            } else
                return false;
            pointA++;
        }
//        如果栈中还剩下元素,则是有开括号未找到匹配
        if (!characterStack.isEmpty())
            result = false;
        return result;
    }
}

执行用时:2 ms, 在所有 Java 提交中击败了74.39% 的用户
内存消耗:36.6 MB, 在所有 Java 提交中击败了46.31% 的用户

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值