LeetCode第20题:有效的括号

Posted itLaity

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode第20题:有效的括号相关的知识,希望对你有一定的参考价值。

生命无罪,健康万岁,我是laity。

我曾七次鄙视自己的灵魂:

第一次,当它本可进取时,却故作谦卑;

第二次,当它在空虚时,用爱欲来填充;

第三次,在困难和容易之间,它选择了容易;

第四次,它犯了错,却借由别人也会犯错来宽慰自己;

第五次,它自由软弱,却把它认为是生命的坚韧;

第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;

第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。

LeetCode第20题:有效的括号

题目

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

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = “()”
输出:true

示例 2:

输入:s = “()[]”
输出:true

示例 3:

输入:s = “(]”
输出:false

解题

时间复杂度: O(n)

class Solution 
    public boolean isValid(String s) 
        LinkedList<Character> stack = new LinkedList<>();
        for (int i = 0; i < s.length(); i++) 
            char c = s.charAt(i);
            if (c == '(' || c == '[' || c == '') 
                stack.push(c);
             else 
                //获取但不删除栈顶元素 :stack.getFirst() - c 根据ASCII码表
                if (stack.size() != 0 && Math.abs(stack.getFirst() - c) <= 2) 
                    stack.pop();
                 else 
                    return false;
                
            
        
        return stack.isEmpty();
    

栈 Stack 的基本使用

因为有效括号该题使用了栈的思想,所以记录一下怕自己忘记

package laity.linkedList;

import java.util.Stack;

/**
 * @author: Laity
 * @Project: JavaLaity
 * @Package: laity.linkedList.testStack
 * @Date: 2022年09月22日 11:42
 * @Description: 演示栈 Stack 的基本使用
 *
 * 特点:先进后出
 */
public class TestStack 
    public static void main(String[] args) 
        Stack<String> stack = new Stack<>();
        stack.add("jack");
        stack.add("tom");
        stack.add("smith");

        // 取
        while (stack.size() > 0) 
            System.out.println(stack.pop()); // pop就是出栈
        
    


全代码

/**
 * @author: Laity
 * @Project: JavaLaity
 * @Package: LeetCode.t20.IsValid
 * @Date: 2022年11月12日 19:35
 * @Description: LeetCode第20题:有效的括号
 */
public class IsValid 

    public static boolean isValid(String s) 
        LinkedList<Character> stack = new LinkedList<>();
        for (int i = 0; i < s.length(); i++) 
            char c = s.charAt(i);
            if (c == '(' || c == '[' || c == '') 
                stack.push(c);
             else 
                //获取但不删除栈顶元素 :stack.getFirst() - c 根据ASCII码表
                if (stack.size() != 0 && Math.abs(stack.getFirst() - c) <= 2) 
                    stack.pop();
                 else 
                    return false;
                
            
        
        return stack.isEmpty();
    

    public static void main(String[] args) 
        String s = "[[[[]]]]";
        System.out.println(isValid(s));
    

长是一种蜕变,失去了旧的,必然因为又来了新的,这就是公平。我是Laity,正在前行的Laity。

以上是关于LeetCode第20题:有效的括号的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode第20题——有效的括号

精选力扣500题 第39题 LeetCode 20. 有效的括号c++/java详细题解

[leetcode] 20. 有效的括号

LeetCode刷题-20.有效括号(JS)

#leetcode刷题之路20-有效的括号

LeetCode实现20 有效的括号,739每日的温度