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,leetcode,算法,职场和发展)