每日一题:LeetCode:1614.括号的最大嵌套深度

  • 每日一题:LeetCode:1614.括号的最大嵌套深度
    • 时间:2022-01-07
    • 力扣难度:Easy
    • 个人难度:Easy
    • 数据结构:字符串、栈
    • 算法:模拟
谢拉.jpg

2022-01-07:LeetCode:1614.括号的最大嵌套深度

1. 题目描述

  • 题目:原题链接

    • 如果字符串满足以下条件之一,则可以称之为有效括号字符串(valid parentheses string,可以简写为 VPS)

      • 字符串是一个空字符串 "",或者是一个不为 () 的单字符
      • 字符串可以写为 AB,表示AB字符串连接,其中AB都是 有效括号字符串
      • 字符串可以写为 (A),其中 A 是一个 有效括号字符串 。
    • 类似地,可以定义任何有效括号字符串 S 的 嵌套深度 depth(S)

      • depth("") = 0
      • depth(C) = 0,其中C是单个字符的字符串,且该字符不是 ()
      • depth(A + B) = max(depth(A), depth(B)),其中 AB 都是 有效括号字符串
      • depth("(" + A + ")") = 1 + depth(A),其中 A 是一个 有效括号字符串
    • 给你一个 有效括号字符串 s,返回该字符串的 s 嵌套深度 。

  • 输入输出规范

    • 输入:字符串s,题目保证字符串是VPS
    • 输出:VPS的最大嵌套深度
  • 输入输出示例

    • 输入:s = "(1+(2*3)+((8)/4))+1"
    • 输出:3

2. 方法:字符串模拟

  • 思路

    • 本题因为题目指定了输入的字符串为有效括号字符串VPS,所以无需考虑左括号和右括号数目不一致的情况
    • 括号匹配类型的问题以及表达式计算等问题,一般都是根据栈的思想来模拟,由于本题最终只需要返回最大嵌套深度,即忽略非括号内容后,连续的左括号的最大个数,所以无需真的使用栈来模拟,只需要根据栈的思想模拟即可
    • 模拟的思路:维护两个变量,分别为当前深度和最大深度,对VPS字符串进行遍历,当前深度遇到左括号+1,遇到右括号-1,最大深度取自身和当前深度中的最大值即可
    • 如果最终结果不是返回最大嵌套深度,而是返回计算结果、表达式的某一部分,此时需要使用栈结构来模拟
  • 复杂度分析:n是s字符串的长度

    • 时间复杂度:O(n),遍历了整个字符串
    • 空间复杂度:O(1),无栈模拟
    • 空间复杂度:O(n),有栈模拟
  • 题解:无栈模拟

    public int maxDepth(String s) {
        if(s == null || s.length() == 0) return 0;
        int curDepth = 0; // 记录当前深度
        int maxDepth = 0; // 记录最大深度
        for (int i = 0; i < s.length(); i++) {
            if(s.charAt(i)  == '(') {
                curDepth++;
                maxDepth = Math.max(maxDepth,curDepth);
            }else if(s.charAt(i) == ')') {
                curDepth--;
            }
        }
        return maxDepth;
    }
    
  • 题解:有栈模拟:

    public int maxDepth(String s) {
        Deque<Character> stack = new LinkedList<>();
        int maxDepth = 0;
        for (int i = 0; i < s.length(); i++) {
            // 遇到左括号入栈
            if (s.charAt(i) == '(') {
                stack.add(s.charAt(i));
                maxDepth = Math.max(maxDepth, stack.size());
                // 遇到右括号则栈顶的左括号出栈
            } else if (s.charAt(i) == ')') {
                stack.removeLast();
            }
        }
        return maxDepth;
    }
    
  • 思考与优化:输入不是VPS的情况

    • 思考:

      • 输入不是VPS时,即左右括号数目、顺序不匹配
      • 此时可以通过判断当前左右括号的深度来判断是否为VPS
      • 非VPS对应遍历过程中当前左括号深度为负,或当前右括号深度为正,以及遍历结束后的左右括号当前深度不为零的情况
    • 题解:

      public int maxDepth(String s) {
          if(s == null || s.length() == 0) return 0;
          int curLeft = 0; // 记录左括号
          int curRight = 0; // 记录右括号
          int maxDepth = 0; // 记录最大深度
          for (int i = 0; i < s.length(); i++) {
              if(curLeft < 0 || curRight > 0) return 0;
              if(s.charAt(i)  == '(') {
                  curLeft++;
                  curRight--;
                  maxDepth = Math.max(maxDepth,curLeft);
              }else if(s.charAt(i) == ')') {
                  curLeft--;
                  curRight++;
              }
          }
          boolean isVps = curLeft == 0 && curRight == 0;
          return isVps ? maxDepth : 0;
      }
      

最后

新人LeetCoder,发布的题解有些会参考其他大佬的思路(参考资料的链接会放在最下面),欢迎大家关注我 ~ ~ ~
如果本文有所帮助的话,希望大家可以给个三连「点赞」&「收藏」&「关注」 ~ ~ ~
也希望大家有空的时候光临我的「个人博客」。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 223,652评论 6 521
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,678评论 3 401
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 170,645评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,483评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,503评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,039评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,420评论 3 427
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,391评论 0 278
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,921评论 1 322
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,973评论 3 343
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,114评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,761评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,437评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,928评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,042评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,596评论 3 380
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,142评论 2 363

推荐阅读更多精彩内容