Maximum Nesting Depth of the Parentheses

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

  • It is an empty string "", or a single character not equal to "(" or ")",
  • It can be written as AB (A concatenated with B), where A and B are VPS's, or
  • 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:

  • depth("") = 0
  • depth(C) = 0, where C is a string with a single character not equal to "(" or ")".
  • depth(A + B) = max(depth(A), depth(B)), where A and B are VPS's.
  • 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 a string s, return the nesting depth of s.

Example 1:

Input: s = "(1+(2*3)+((8)/4))+1"
Output: 3

Approach

Java

public class MaxNestingDepthParentheses {
    public static void main(String[] args) {
         String s = "(1+(2*3)+((8)/4))+1";
          System.out.println(maxDepth(s));
    }

    static int maxDepth(String s) {
        int n = s.length();
        int ans = 0;
        int open = 0;
        for (int i = 0; i < n; i++) {
            if (s.charAt(i) == '(') {
                open++;
                ans = Math.max(ans, open);
            } else if (s.charAt(i) == ')') {
                open--;
            }
        }
        return ans;
    }
}

C++

#include <bits/stdc++.h>
using namespace std;
int maxDepth(string s)
{
    int n = s.size();
    int ans = 0;
    int open = 0;
    for (int i = 0i < ni++)
    {
        if (s[i] == '(')
        {
            open++;
            ans = max(ansopen);
        }
        else if (s[i] == ')')
        {
            open--;
        }
    }
    return ans;
}

int main()
{
    string s = "(1+(2*3)+((8)/4))+1";
    cout << maxDepth(s);
    return 0;
}


No comments:

Post a Comment