【陪伴式刷题】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)
相关推荐
Ricky111zzz1 天前
leetcode学python记录1
python·算法·leetcode·职场和发展
逆境不可逃1 天前
LeetCode 热题 100 之 230. 二叉搜索树中第 K 小的元素 199. 二叉树的右视图 114. 二叉树展开为链表
算法·leetcode·职场和发展
wfbcg1 天前
每日算法练习:LeetCode 15. 三数之和 ✅
算法·leetcode·职场和发展
y = xⁿ1 天前
【LeetCode Hot100】双指针:分离指针
算法·leetcode
6Hzlia1 天前
【Hot 100 刷题计划】 LeetCode 41. 缺失的第一个正数 | C++ 原地哈希题解
c++·leetcode·哈希算法
小肝一下1 天前
每日两道力扣,day6
数据结构·c++·算法·leetcode·双指针·hot100
人道领域1 天前
【LeetCode刷题日记】242.字母异位词
算法·leetcode·职场和发展
XWalnut1 天前
LeetCode刷题 day8
算法·leetcode·职场和发展
Ricky111zzz1 天前
leetcode学python记录2
python·算法·leetcode·职场和发展
会编程的土豆1 天前
【数据结构与算法】堆排序
开发语言·数据结构·c++·算法·leetcode