• 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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    栈 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就是出栈
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    全代码

    /**
     * @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));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

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

  • 相关阅读:
    openGauss指定schema下全部表结构备份与恢复
    arx实现三维实体贴材质图
    第二章 C++对C的拓展
    公钥密码学中的公钥和私钥
    软件架构设计 C/S与B/S架构的区别
    Springloaded使用方法
    MySQL--主从复制和读写分离
    Python算法——树的镜像
    java spring cloud 企业工程管理系统源码+二次开发+定制化服务
    基于51单片机的温度报警系统
  • 原文地址:https://blog.csdn.net/duyun0/article/details/127852974