• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

[Leetcode] 0020. 有效的括号

武飞扬头像
YEGE学AI算法
帮助1

20. 有效的括号

点击上方,跳转至leetcode

题目描述

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

有效字符串需满足:

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

示例 1:

  1.  
    输入:s = "()"
  2.  
    输出:true

示例 2:

  1.  
    输入:s = "()[]{}"
  2.  
    输出:true

示例 3:

  1.  
    输入:s = "(]"
  2.  
    输出:false

提示:

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

解法

方法一:栈

遍历括号字符串 \(s\),遇到左括号时,压入当前的左括号;遇到右括号时,弹出栈顶元素(若栈为空,直接返回 false),判断是否匹配,若不匹配,直接返回 false

也可以选择遇到左括号时,将右括号压入栈中;遇到右括号时,弹出栈顶元素(若栈为空,直接返回 false),判断是否是相等。若不匹配,直接返回 false

两者的区别仅限于括号转换时机,一个是在入栈时,一个是在出栈时。

遍历结束,若栈为空,说明括号字符串有效,返回 true;否则,返回 false

时间复杂度 \(O(n)\)空间复杂度 \(O(n)\)。其中 \(n\) 为括号字符串 \(s\) 的长度。

Python3

  1.  
    class Solution:
  2.  
    def isValid(self, s: str) -> bool:
  3.  
    if len(s) % 2 == 1:
  4.  
    return False
  5.  
     
  6.  
    pairs = {
  7.  
    ")": "(",
  8.  
    "]": "[",
  9.  
    "}": "{",
  10.  
    }
  11.  
    stack = list()
  12.  
    for ch in s:
  13.  
    if ch in pairs:
  14.  
    if not stack or stack[-1] != pairs[ch]:
  15.  
    return False
  16.  
    stack.pop()
  17.  
    else:
  18.  
    stack.append(ch)
  19.  
     
  20.  
    return not stack
学新通

C

  1.  
    class Solution {
  2.  
    public:
  3.  
    bool isValid(string s) {
  4.  
    int n = s.size();
  5.  
    if (n % 2 == 1) {
  6.  
    return false;
  7.  
    }
  8.  
     
  9.  
    unordered_map<char, char> pairs = {
  10.  
    {')', '('},
  11.  
    {']', '['},
  12.  
    {'}', '{'}
  13.  
    };
  14.  
    stack<char> stk;
  15.  
    for (char ch: s) {
  16.  
    if (pairs.count(ch)) {
  17.  
    if (stk.empty() || stk.top() != pairs[ch]) {
  18.  
    return false;
  19.  
    }
  20.  
    stk.pop();
  21.  
    }
  22.  
    else {
  23.  
    stk.push(ch);
  24.  
    }
  25.  
    }
  26.  
    return stk.empty();
  27.  
    }
  28.  
    };
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggiccj
系列文章
更多 icon
同类精品
更多 icon
继续加载