周五了,好耶ヾ(✿゚▽゚)ノ
1、看题
题目如此之长,然而几乎都是废话。
让我们来看看重点。
2、审题
题目列举了很多说明来解释何为 有效括号字符串,何为 嵌套深度 。
这些概念固然是解题的重点,但没必要浪费过多口舌。
在厘清了这些概念后,并去掉冗余的说明后,我们需要处理的实际上就只有括号了。
3、思路
明显,这道题也可以使用栈来实现。
由于我们需要知道括号的嵌套深度,而题目又保证了输入的字符串是有效的括号字符串。这意味着有左括号就一定会有对应的右括号。
而如何知道嵌套深度呢?
我们只需要在遇到左括号时,把它放入栈内,遇到右括号时,将栈内的左括号出栈。
而栈内的左括号数量最多的时刻,即为最大的嵌套深度。
觉得这就可以了?
不,其实我们只用沿用栈的思想即可,由于我们的栈内只用存放左括号,并且无需知道左括号出现的位置,所以我们根本无需动用到栈,只用一个计数器来记录左括号的次数即可。
每次遇到左括号,将计数器加一。遇到右括号时,记录当前的计数器数量的最大值,然后将计数器减一。
这就是这题的解法了。
4、动手!
class Solution {
private static final Character LEFT = '(';
private static final Character RIGHT = ')';
public int maxDepth(String s) {
int maxDepth = 0;
int curDepth = 0;
for (char c : s.toCharArray()) {
//只有左括号才压入栈内
if (c == LEFT) {
curDepth++;
}
if (c == RIGHT) {
maxDepth = Math.max(maxDepth, curDepth);
curDepth--;
}
}
return maxDepth;
}
}
嗯。我觉得思路里已经解释得很清楚了,应该无需再多解读什么。
5、提交
当然如此!
6、咀嚼
一次遍历,时间复杂度为O(N)。
仅使用了两个计数器,空间复杂度为 O(1) 。
7、康康大牛
嗯。
简单道大家的做法都是完全一样的思路。
吼!看我的就行!
8、总结
感觉周五基本上都是简单题啊。
毕竟也是劳累了一周了,就这样放松放松迎来下一周的工作吧。
社畜们!下班了!