【陪伴式刷题】Day 10|栈和队列| 20. 有效的括号(Valid Parentheses)

题目描述

英文版描述

Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.
  3. Every close bracket has a corresponding open bracket of the same type.

Example 1:

Input: s = "()" Output: true

Example 2:

Input: s = "()[]{}" Output: true

Example 3:

Input: s = "(]" Output: false

Constraints:

  • 1 <= s.length <= 10(4)
  • s consists of parentheses only '()[]{}'.

英文版地址

leetcode.com/problems/va...

中文版描述

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

有效字符串需满足:

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

示例 1:

输入: s = "()"

输出: true

示例 2:

输入: s = "()[]{}"

输出: true

示例 3:

输入: s = "(]"

输出: false

提示:

  • 1 <= s.length <= 10(4)
  • s 仅由括号 '()[]{}' 组成

中文版地址

leetcode.cn/problems/va...

解题方法

俺这版

java 复制代码
class Solution {
    public boolean isValid(String s) {
        if (s == null) {
            return true;
        }
        char[] chars = s.toCharArray();
        int len = chars.length;
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < len; i++) {
            if (stack.isEmpty()) {
                if (chars[i] == ')' || chars[i] == ']' || chars[i] == '}') {
                    return false;
                } else {
                    stack.push(chars[i]);
                }
            } else {
                if (chars[i] == '(' || chars[i] == '[' || chars[i] == '{') {
                    stack.push(chars[i]);
                    continue;
                } else {
                    Character pop = stack.pop();
                    if (chars[i] == ')') {
                        if (pop.equals('(')) {
                            continue;
                        } else {
                            return false;
                        }
                    }
                    if (chars[i] == ']') {
                        if (pop.equals('[')) {
                            continue;
                        } else {
                            return false;
                        }
                    }
                    if (chars[i] == '}') {
                        if (pop.equals('{')) {
                            continue;
                        } else {
                            return false;
                        }
                    }
                }
            }
        }
        return  stack.isEmpty() ? true : false;
    }
}

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)
相关推荐
chengooooooo1 小时前
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
算法·leetcode·职场和发展
姚先生971 小时前
LeetCode 54. 螺旋矩阵 (C++实现)
c++·leetcode·矩阵
nuyoah♂4 小时前
DAY36|动态规划Part04|LeetCode:1049. 最后一块石头的重量 II、494. 目标和、474.一和零
算法·leetcode·动态规划
pzx_0014 小时前
【LeetCode】LCR 175.计算二叉树的深度
开发语言·c++·算法·leetcode·职场和发展
Aloha_up4 小时前
LeetCode hot100-89
算法·leetcode·职场和发展
南宫生4 小时前
力扣-贪心-1【算法学习day.71】
java·学习·算法·leetcode
axxy20004 小时前
leetcode之hot100---21合并两个有序链表(C++)
c++·leetcode·链表
程序猿小柒7 小时前
【LeetCode每日一题】LeetCode 345.反转字符串中的元音字母
算法·leetcode
m0_694938018 小时前
Leetcode打卡:考场就坐
javascript·算法·leetcode
დ旧言~11 小时前
专题八:背包问题
算法·leetcode·动态规划·推荐算法