0
点赞
收藏
分享

微信扫一扫

【力扣刷题第八天-1】 简单题 20.有效的括号

四月天2021 2022-03-15 阅读 40

文章目录


前言

  本题主要利用「」这一数据结构来解决。

提示:以下是本篇文章正文内容,编程语言为Java

一、题目描述

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

示例 1:

输入:s = "()"
输出:true

链接:https://leetcode-cn.com/problems/valid-parentheses

二、解题思路

  本题比较简单,可以很容易想到利用这一数据结构来解决。
  我们遍历给定的字符串 s。此时可以分为两种情况:
  1)当遇到左括号时直接把它放入栈顶。
  2)当遇到右括号时。我们就要弹出栈顶元素,看是否和当前括号匹配,若不匹配则该括号无效,直接返回 false这里要特别注意栈为空的情况。
  遍历结束,若栈为空,则所有括号都有效,返回 true。否则,说明左括号多,返回 false

三、示例代码

class Solution {
    public boolean isValid(String s) {
        Deque<Character> st=new LinkedList<>();
        for(char c:s.toCharArray()){
            if(c=='('||c=='['||c=='{'){
                st.push(c);
            }
            else if(st.isEmpty()||c==')'&&st.pop()!='('||c=='}'&&st.pop()!='{'||c==']'&&st.pop()!='['){
                return false;
            }

        }
        return st.isEmpty();

    }
}

时间复杂度:O(n),其中 n 是字符串 s 的长度。

总结

  Java可以用Deque<Character> st=new LinkedList<>()来初始化栈,不推荐用Stack
  其中,LinkedList是一个双端队列,里面封装了栈的常用方法,如下表所示:

堆栈方法等效Deque方法
push(e)addFirst(e)
pop()removeFirst()
peek()peekFirst()
举报

相关推荐

0 条评论