算法leetcode每日一练1614. 括号的最大嵌套深度

Posted 二当家的白帽子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法leetcode每日一练1614. 括号的最大嵌套深度相关的知识,希望对你有一定的参考价值。


文章目录


1614. 括号的最大嵌套深度:

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

  • 字符串是一个空字符串 "",或者是一个不为 "("")" 的单字符。
  • 字符串可以写为 ABAB 字符串连接),其中 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 是一个 有效括号字符串

例如:"""()()""()(()())" 都是 有效括号字符串(嵌套深度分别为 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有效的括号表达式

分析

  • 面对这道算法题目,二当家的陷入了沉思。
  • 题目保证了括号表达式是有效的,所以我们只用考虑正常的括号表达式的深度如何统计。
  • 经过分析,任何位置左括号比右括号多出来的数量,或者说还没有被右括号匹配掉的左括号数量便是深度。

题解

java

class Solution 
    public int maxDepth(String s) 
        int ans  = 0;
        int left = 0;

        for (int i = 0; i < s.length(); ++i) 
            switch (s.charAt(i)) 
                case '(':
                    ans = Math.max(ans, ++left);
                    break;
                case ')':
                    --left;
                    break;
                default:
                    // do-nothing
                    break;
            
        

        return ans;
    


c

int maxDepth(char * s)
    int ans = 0;
    int left = 0;

    while (*s) 
        switch (*s) 
            case '(':
                ans = fmax(ans, ++left);
                break;
            case ')':
                --left;
                break;
            default:
                // do-nothing
                break;
        
        ++s;
    

    return ans;


c++

class Solution 
public:
    int maxDepth(string s) 
        int ans = 0;
        int left = 0;
        for (char c: s) 
            switch (c) 
                case '(':
                    ans = max(ans, ++left);
                    break;
                case ')':
                    --left;
                    break;
                default:
                    // do-nothing
                    break;
            
        
        return ans;
    
;

python

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

go

func maxDepth(s string) (ans int) 
    left := 0
	for _, c := range s 
		switch c 
		case '(':
			left++
			if left > ans 
				ans = left
			
		case ')':
			left--
		
	
	return


rust

impl Solution 
    pub fn max_depth(s: String) -> i32 
        let mut ans = 0;
        let mut left = 0;
        s.as_bytes().iter().for_each(|&b| 
            match b as char 
                '(' => 
                    left += 1;
                    ans = ans.max(left);
                ,
                ')' => 
                    left -= 1;
                ,
                _ => 
            ;
        );

        ans
    



原题传送门:https://leetcode-cn.com/problems/maximum-nesting-depth-of-the-parentheses/


非常感谢你阅读本文~
欢迎【👍点赞】【⭐收藏】【📝评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


以上是关于算法leetcode每日一练1614. 括号的最大嵌套深度的主要内容,如果未能解决你的问题,请参考以下文章

算法leetcode每日一练2130. 链表最大孪生和

算法leetcode每日一练1725. 可以形成最大正方形的矩形数目

算法leetcode每日一练2130. 链表最大孪生和

算法leetcode每日一练2044. 统计按位或能得到最大值的子集数目

算法leetcode每日一练1725. 可以形成最大正方形的矩形数目

算法leetcode每日一练2220. 转换数字的最少位翻转次数