📖本篇内容:leetcode每日一题1614. 括号的最大嵌套深度 昨日之栈 今日之用
📆 最近更新:2022年1月6日 leetcode每日一题71.简化路径 栈的简单应用 如果是你 你还会用什么方法
🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起
写在前面
啦啦啦,啦啦啦,我是写程序的小行家~今天我又来打卡了哦,因为这两天又对加深了Spring整体一站式框架的学习,所以每到半夜都睡不着,这不巧了,跟着就起来刷题了,不过定睛一看,今天的简单题确实格外的熟悉,和昨日之题有异曲同工之处,这就多劳力扣费心了qwq,话不多说咱们来干今天的题吧。
题目
- 括号的最大嵌套深度
如果字符串满足以下条件之一,则可以称之为
有效括号字符串
(valid parentheses string,可以简写为VPS
):
字符串是一个空字符串 “”,或者是一个不为 “(” 或 “)” 的单字符。
字符串可以写为 AB(A 与 B 字符串连接),其中 A 和 B 都是有效括号字符串
。
字符串可以写为 (A),其中 A 是一个有效括号字符串
。
类似地,可以定义任何有效括号字符串 S 的嵌套深度
depth(S):
depth("") = 0
depth© = 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 是 有效的括号表达式
思路
昨日之栈,今日之用,大家既然昨天刷到了那道题,那么今天这道题利用栈的思想很快也能做答。
- 维护一个栈,当出现
'('
时就将其入栈,当出现')'
时就出栈,并记录此时的最大深度。
代码实现
class Solution {
public int maxDepth(String s) {
//维护栈
Stack<Character> stack = new Stack<>();
//记录最大深度
int res = 0;
int n = s.length();
for (int i = 0 ; i< n;i++){
if (s.charAt(i) == '('){
stack.push(s.charAt(i));
}
if (s.charAt(i) == ')'){
stack.pop();
}
//比较深度,获得最大深度
res = Math.max(stack.size() ,res);
}
return res;
}
}
执行结果
代码优化
这里咱么可以不用到栈,用到栈的思想,每次遇到左括号就+1,遇到右括号就抵消,取得最大深度
class Solution {
public int maxDepth(String s) {
int depth=0;
int res=0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='(')
depth++;
if(s.charAt(i)==')')
depth--;
res=Math.max(res,depth);
}
return res;
}
}
写在后面
2022-01-07小付坚持打卡了哦~
睡觉睡觉,毕竟小命要紧~
合理利用栈的数据结构
以及思想能够解决不少开发中的问题哦
最后
每天进步点 每天收获点
愿诸君 事业有成 学有所获
如果觉得不错 别忘啦一键三连哦~