记录自己第一次(不是)参加每日一题

113 阅读2分钟

记录自己第一次(不是)参加每日一题

题目(bulabulabula说了一大堆)

1614. 括号的最大嵌套深度

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

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

depth("") = 0 depth(C) = 0,其中 C 是单个字符的字符串,且该字符不是 "(" 或者 ")" depth(A + B) = max(depth(A), depth(B)),其中 A 和 B 都是 有效括号字符串 depth("(" + A + ")") = 1 + depth(A),其中 A 是一个 有效括号字符串 例如:""、"()()"、"()(()())" 都是 有效括号字符串(嵌套深度分别为 0、1、2),而 ")(" 、"(()" 都不是 有效括号字符串 。

有用的就是这一句

给你一个 有效括号字符串 s,返回该字符串的 s 嵌套深度 。

 输入:s = "(1+(2*3)+((8)/4))+1"
 输出:3
 解释:数字 8 在嵌套的 3 层括号中。
 输入:s = "(1)+((2))+(((3)))"
 输出:3
 ....

思路

  • 直接遍历字符串
  • 遇到左括号( count++模拟入栈
  • 遇到右括号)记录当前出现的最大值max,然后count--,模拟出栈
  • 最后返回最大值max

实现

 class Solution {
     public int maxDepth(String s) {
         int max = 0;
         int count = 0;
         for(char ch: s.toCharArray()){
             if(ch == '(') count++;
             if(ch == ')') {
                 max = Math.max(count, max);
                 count--;
             }
         }
         return max;
     }
 }

吐槽

第一眼看见这个题目的时候还以为有多复杂,看见括号脑海中已经浮现了栈的各种方法。但是。。。细读下来,卧槽,这也忒简单了吧!

\