LeetCode力扣官方题解1614。括号的最大嵌套深度
题目描述
如果字符串满足以下条件之一,则可以称之为有效括号字符串(validparenthesesstring,可以简写为VPS):字符串是一个空字符串,或者是一个不为(或)的单字符。字符串可以写为AB(A与B字符串连接),其中A和B都是有效括号字符串。字符串可以写为(A),其中A是一个有效括号字符串。
类似地,可以定义任何有效括号字符串S的嵌套深度depth(S):depth()0depth(C)0,其中C是单个字符的字符串,且该字符不是(或者)depth(AB)max(depth(A),depth(B)),其中A和B都是有效括号字符串depth((A))1depth(A),其中A是一个有效括号字符串
例如:、()()、()(()())都是有效括号字符串(嵌套深度分别为0、1、2),而)(、(()都不是有效括号字符串。
给你一个有效括号字符串s,返回该字符串的s嵌套深度。
示例1:输入:s(1(23)((8)4))1输出:3解释:数字8在嵌套的3层括号中。
示例2:输入:s(1)((2))(((3)))输出:3
提示:1s。length100s由数字09和字符、、、、(、)组成题目数据保证括号表达式s是有效的括号表达式
解决方案
方法一:遍历
对于括号计算类题目,我们往往可以用栈来思考。
遍历字符串s,如果遇到了一个左括号,那么就将其入栈;如果遇到了一个右括号,那么就弹出栈顶的左括号,与该右括号匹配。这一过程中的栈的大小的最大值,即为s的嵌套深度。
代码实现时,由于我们只需要考虑栈的大小,我们可以用一个变量size表示栈的大小,当遇到左括号时就将其加一,遇到右括号时就将其减一,从而表示栈中元素的变化。这一过程中size的最大值即为s的嵌套深度
代码
Python3classSolution:defmaxDepth(self,s:str)int:ans,size0,0forchins:ifch(:size1ansmax(ans,size)elifch):size1returnans
CclassSolution{public:intmaxDepth(strings){intans0,size0;for(charch:s){if(ch(){size;ansmax(ans,size);}elseif(ch)){size;}}returnans;}};
JavaclassSolution{publicintmaxDepth(Strings){intans0,size0;for(inti0;is。length();i){charchs。charAt(i);if(ch(){size;ansMath。max(ans,size);}elseif(ch)){size;}}returnans;}}
GolangfuncmaxDepth(sstring)(ansint){size:0for,ch:ranges{ifch({sizeifsizeans{anssize}}elseifch){size}}return}
CpublicclassSolution{publicintMaxDepth(strings){intans0,size0;foreach(charchins){if(ch(){size;ansMath。Max(ans,size);}elseif(ch)){size;}}returnans;}}
CdefineMAX(a,b)((a)(b)?(a):(b))intmaxDepth(chars){intans0,size0;intnstrlen(s);for(inti0;in;i){if(s〔i〕(){size;ansMAX(ans,size);}elseif(s〔i〕)){size;}}returnans;}
JavaScriptvarmaxDepthfunction(s){letans0,size0;for(leti0;is。length;i){constchs〔i〕;if(ch(){size;ansMath。max(ans,size);}elseif(ch)){size;}}returnans;};
复杂度分析时间复杂度:O(n),其中n是字符串s的长度。空间复杂度:O(1),我们只需要常数空间来存放若干变量。
BY
本文作者:力扣