每日一题-括号的最大嵌套深度(简单)

236 阅读2分钟

1614. 括号的最大嵌套深度

一、题目描述

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

  • 字符串是一个空字符串 "",或者是一个不为 "(" 或 ")" 的单字符。
  • 字符串可以写为 ABA 与 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 嵌套深度 。

二、示例 

示例 1:

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

示例 2:

输入: s = "(1)+((2))+(((3)))"
输出: 3

示例 3:

输入: s = "1+(2*3)/(2-1)"
输出: 1

示例 4:

输入: s = "1"
输出: 0

提示:

  • 1 <= s.length <= 100
  • s 由数字 0-9 和字符 '+''-''*''/''('')' 组成
  • 题目数据保证括号表达式 s 是 有效的括号表达式

三、分析

依题意,给定一个 有效括号字符串s,也就是说不需要我们自己判断该字符串是否是有效字符串了,只需求的该字符串的嵌套深度。我们只需遍历该字符串字符,遇到'('则将size加一,遇到 ')' 则将size减一,最后返回ans即可。
算法核心思想:遍历,栈

复杂度分析:

需要遍历整个字符串,所以时间复杂度为O(n)O(n)

四、编码

public class MaxDepth {

    public int maxDepth(String s) {
        int ans = 0, size = 0;
        char[] chars = s.toCharArray();
        for (char c : chars) {
            if (c == '(') {
                size++;
                ans = Math.max(ans, size);
            } else if (c == ')') {
                size--;
            }
        }
        return ans;
    }
}

题目链接