leetcode 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.

输入一个字符串s,这个字符串是由字符'(', ')', '{', '}', '[' 和 ']'组成的。我们需要判定这个字符串的格式是否有效。判定是否有效的一句就是,字符必须严格有序。例如"()" 和 "()[]{}"是有效的,但是"()"和"()[]{}"就是无效的。

想法

  • 这道题目比较适合用栈作为存储中间结果的数据结构,因为字符应当是后进先出,方便我们进行判断。
  • 对于前一半字符(eg.‘(’,'[','{'),我们对它们进行入栈操作。
  • 如果遇到了后半字符,我们需要对栈顶元素取出,并判断栈顶字符和当前字符是否匹配。如果不匹配,即整个字符串无效。
  • 当整个字符串的遍历结束的时候,判断栈是否为空(完全匹配)。

解法

        Stack<Character> save = new Stack<Character>();
        if(s.length() == 0)return true;
        
        for(char c : s.toCharArray()){
            if(c == '('){
                save.push(')');
            }else if (c == '['){
                save.push(']');
            }else if (c == '{'){
                save.push('}');
            }else if (save.isEmpty() || c != save.pop()){
                return false;
            }
        }
        
        return save.isEmpty();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值