[20] Valid Parentheses

1. 题目描述

Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.

给定一个字符串,判断字符串中包含的三种括号’(’ / ‘[’ / ‘{‘是否是成对的。

2. 解题思路

判断括号是否成对使用一个栈即可。当括号为左括号的时候入栈,右括号的时候出栈判断是否匹配。但是其中还是有两个坑,有坑就是因为一开始没想清楚就写代码(piapiapia该打)。一个就是当输入一堆右括号的时候,出栈要判断栈是否为空。另一个就是当输入一堆左括号的时候,如果出栈完成还有左括号在栈里那么也是不匹配的,如({{()[{}]这样子的,最后栈里还留下了({{,他并不是一个满足要求的输入。

3. Code

import java.util.Stack;

public class Solution {
    public boolean isValid(String s) {
        Stack<Integer> brackets = new Stack<>();
        // 判断一下是不是奇数长度,如果是,肯定不是一个正确结果
        if(s.length()%2 != 0) return false;
        for(int i = 0; i < s.length(); ++i)
        {
            char curc = s.charAt(i);
            if(isLeft(curc)) brackets.push((int)curc);
            else
            {
                // 坑1:}])...
                if(brackets.isEmpty()) return false;
                if(curc == ')')
                {
                    if(brackets.pop() != '(') return false;
                }
                else if(curc == ']')
                {
                    if(brackets.pop() != '[') return false;
                }
                else if(curc == '}')
                {
                    if(brackets.pop() != '{') return false;
                }
                else
                {
                    return false;
                }
            }
        }
        // 坑2: {([...
        if(brackets.isEmpty()) return true;
        return false;
    }

    private boolean isLeft(char c)
    {
        return c == '(' || c == '[' || c == '{';
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值