---
# System prepended metadata

title: 1614. Maximum Nesting Depth of the Parentheses
tags: [stack, leetcode]

---

# 資訊

:::info
- Question: 1614. Maximum Nesting Depth of the Parentheses
- From: Leetcode Daily Challenge 2024.04.04
- Difficulty: Easy
:::

---

# 目錄

:::info
[TOC]
:::

---

# 題目

A string is a valid parentheses string (denoted **VPS**) if it meets one of the following:

1. It is an empty string `""`, or a single character not equal to `"("` or `")"`,
2. It can be written as `AB` (`A` concatenated with `B`), where `A` and `B` are VPS's, or
3. It can be written as `(A)`, where `A` is a VPS.

We can similarly define the nesting depth `depth(S)` of any VPS `S` as follows:

1. `depth("") = 0`
2. `depth(C) = 0`, where `C` is a string with a single character not equal to `"("` or `")"`.
3. `depth(A + B) = max(depth(A), depth(B))`, where `A` and `B` are VPS's.
4. `depth("(" + A + ")") = 1 + depth(A)`, where `A` is a VPS.

For example, `""`, `"()()"`, and `"()(()())"` are VPS's (with nesting depths 0, 1, and 2), and `")("` and `"(()"` are not VPS's.

Given a VPS represented as string `s`, return the nesting depth of `s`.

> Example 1:
:::success
* Input: s = "(1+(2*3)+((8)/4))+1"
* Output: 3
* Explnation: Digit 8 is inside of 3 nested parentheses in the string.
:::

> Example 2:
:::success
* Input: s = "(1)+((2))+(((3)))"
* Output: 3
:::

> Constraints:
:::success
* 1 <= `s.length` <= 100
* s consists of digits `0`-`9` and characters `'+'`, `'-'`, `'*'`, `'/'`, `'('`, and `')'`.
* It is guaranteed that parentheses expression `s` is a VPS.
:::

---

# 解法

## 概念

這題雖然說 stack，但其實不用真的開一個 stack 去紀錄，因為只要知道最深的深度是多少，其實重心放在最深的左括號就好，因此當我遇到一個左括號，我就會將目前深度 +1，反之當我遇到右括號，深度就會 -1，這樣去看左括號最深深度在哪裡就可以知道答案了

唯一要注意的就是深度這件事情他並沒有要求括號不能算，也就是說 `((()))` 和 `(((5)))` 對這題來說都是 3，因此才說重心放在左括號上即可，其他括號以外的符號不需考慮

## 程式碼

```python=
class Solution:
    def maxDepth(self, s: str) -> int:
        ans = 0
        count = 0
        for e in s:
            if e == '(':
                count += 1
                ans = max( ans, count )
            elif e == ')':
                count -= 1
        return ans
```

---

# 複雜度

## 時間複雜度

這邊我 traverse 完整一次 `s`，所以是 $O(n)$

![TimeComplexity20240404](https://hackmd.io/_uploads/r1I1Sisk0.png =80%x)

## 空間複雜度

空間部分就是紀錄深度，所以是 $O(1)$

![SpaceComplexity20240404](https://hackmd.io/_uploads/B1g-HjoJR.png =80%x)
