【陪伴式刷题】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)
相关推荐
Lenyiin32 分钟前
02.06、回文链表
数据结构·leetcode·链表
烦躁的大鼻嘎1 小时前
模拟算法实例讲解:从理论到实践的编程之旅
数据结构·c++·算法·leetcode
祁思妙想2 小时前
10.《滑动窗口篇》---②长度最小的子数组(中等)
leetcode·哈希算法
alphaTao3 小时前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian3 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
jiao_mrswang5 小时前
leetcode-18-四数之和
算法·leetcode·职场和发展
王燕龙(大卫)5 小时前
leetcode 数组中第k个最大元素
算法·leetcode
Swift社区14 小时前
LeetCode - #139 单词拆分
算法·leetcode·职场和发展
Dong雨15 小时前
力扣hot100-->栈/单调栈
算法·leetcode·职场和发展
trueEve17 小时前
SQL,力扣题目1369,获取最近第二次的活动
算法·leetcode·职场和发展