LeetCode----Valid Parentheses

Valid Parentheses

今天做了一道LeetCode上easy题,要求是判断括号是否匹配
Example 1:

Input: “()”
Output: true
Example 2:

Input: “()[]{}”
Output: true
Example 3:

Input: “(]”
Output: false
Example 4:

Input: “([)]”
Output: false
Example 5:

Input: “{[]}”
Output: true

思路:

第一步:判断if(s==null)是则返回false;
第二步:定义一个Stack braces=new Stack<>()栈,遍历s,如果遇到左边的括号则入栈,遇到右边的括号则判断栈顶元素是不是匹配的左括号if(braces.peek()!=(s.charAt(i)-1)&&braces.peek()!=(s.charAt(i)-2)),如果是则出栈,如果不是则ruturn false;如果期间栈空但s还没有遍历完则return false;
第三步:如果遍历完s之后栈还没空,说明左括号多于右括号,return false;
第四步:能走到这里说明没有问题,return true;

代码:

import java.util.Stack;
class Solution {
    public boolean isValid(String s) {
        if(s==null)
            return false;
        int i=0;
        Stack<Character> braces=new Stack<>();
        while(i<s.length()){
            if(s.charAt(i)=='('||s.charAt(i)=='['||s.charAt(i)=='{')
                braces.push(s.charAt(i));
            else if(s.charAt(i)==')'||s.charAt(i)==']'||s.charAt(i)=='}'){
                if(braces.empty())
                    return false;
               	//使用了ASCII码的关系来判断是否是对应的左右括号
                else if(braces.peek()!=(s.charAt(i)-1)&&braces.peek()!=(s.charAt(i)-2))
                     return false;   
                else
                    braces.pop();
            }  
            i++;
        }
       if(!braces.empty())
            return false; 
       return true;
    }
}

LeetCode的时间复杂度和空间复杂度分析:
在这里插入图片描述

小结:
1、一开始我在想能不能不用栈来做,可能可以快一点,就想到了想到了下面这种方法
在这里插入图片描述
然后写完才发现这个不能满足所有情况,如果是“{[()]}”这种互相包裹的情况没问题,但如果是()[]{}就有问题了,想法不够全面。。。。。。

2、LeetCode要求输入的s为""应该返回true,但我觉得要返回false,因为这个输入不符合要求;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值