前言
最近被新型冠状病毒搞得人心惶惶,大家都不太敢出门,我也不敢出门(哈哈哈),索性就在家里刷了一道leetcode的简单题——有效的括号(leetcode20题),说简单也不简单,说难也不难,刷完之后觉得意犹未尽。然后再刷了一道leetcode的困难题——最长有效括号(leetcode32题)。今天就来讲一下这两道相似题目的题解。
第一题(leetcode20_有效的括号)
思路
先列出括号的类型把他存在HashMap中,然后利用栈先进后出的特性来解决。如果是左括号就直接进栈,如果是右括号就出栈,然后判断出栈的左括号是否对应着对应的右括号即可。
代码
1 | package leetcode; |
复杂度分析
- 时间复杂度:O(N)。因为整个过程遍历一遍就可以处理完
- 空间复杂度:O(N)。借助了大小为N的栈来辅助完成
第二题(leetcode32_最长有效括号)
思路
对于每个’(‘,我们将它的下标进栈。对于每个’)’,我们弹出栈顶的元素并将当前元素的下标于当前栈顶下标作差,得出当前有效括号的长度。
代码
1 | package leetcode; |
复杂度分析
- 时间复杂度:O(N)。因为遍历一次就能得出最长的有效括号
- 空间复杂度:O(N)。因为借助了大小为N的辅助栈处理