Leetcode-20 Valid Parentheses

20. Valid Parentheses

原题目

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.

翻译

给一个仅包含’(’, ‘)’, ‘{’, ‘}’, ‘[’ 和 ']'的字符串,然后判断这个字符串是否是有效的。
括号必须按照顺序进行闭合,比如"()" 和 “()[]{}” 都是有效的,但是 “(]” 和 “([)]” 不是有效的.

解题思路

这是一个典型的栈应用的例子。如果是字符’(’,’[’, ‘{’, 将其压入栈,如果是’)’,’]’,’}’
就从栈中取顶部字符,如果栈为空或者不相匹配,那么就可以认定是无效的。
如果和栈顶元素匹配,就继续遍历字符串判定。
时间复杂度:O(n)
空间复杂度:O(2)

代码示例

 public static boolean isValid(String s) {
        if (s == null ||s.length() <= 1){
            return false;
        }

        Stack<Character> stack = new Stack<>();
        for (int i = 0; i <= s.length()-1;i++){
            Character ch = s.charAt(i);
            if (ch == '(' || ch == '[' || ch == '{'){
                stack.push(ch);
            }else{
                if (stack.size() == 0){
                    return false;
                }

                Character sch = stack.pop();

                if (ch == ')'){
                    if (sch != '('){
                        return false;
                    }
                }else if (ch == ']'){
                    if (sch != '['){
                        return false;
                    }
                }else if (ch == '}'){
                    if (sch != '{'){
                        return false;
                    }
                }
            }
        }
        return stack.size() == 0;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值