返回
程序猿必会:LeetCode 1021题解析——快来一起做题!
前端
2024-01-13 22:30:08
大家好,我是挨打的阿木木,爱好算法的前端摸鱼老。最近会频繁给大家分享我刷算法题过程中的思路和心得。如果你也是想提高逼格的摸鱼老,欢迎关注我,一起学习。
今天我们要一起解决的是LeetCode 1021题:删除最外层的括号。
题目
给定一个由有效括号字符组成的字符串s,删除最外层的括号并返回结果字符串。
示例 1:
输入:s = "(()())"
输出:"()()"
解释:
最外层的括号为"()",所以结果为"()()"。
示例 2:
输入:s = "(())(())"
输出:"()()()"
解释:
最外层的括号为"()"和"()",所以结果为"()()()"。
示例 3:
输入:s = "(()())(())"
输出:"()()()()"
解释:
最外层的括号为"()"、"()"和"()",所以结果为"()()()()"。
示例 4:
输入:s = "((()(())))"
输出:"()()"
解释:
最外层的括号为"()"和"()",所以结果为"()()"。
示例 5:
输入:s = "(()(((()))))"
输出:"()()"
解释:
最外层的括号为"()"和"()",所以结果为"()()"。
解题思路
这道题的解题思路非常简单,我们可以使用栈来解决。
首先,我们将字符串s从左到右遍历一遍,并将每个括号压入栈中。
当我们遇到一个左括号'('时,我们直接将其压入栈中。
当我们遇到一个右括号')'时,我们检查栈顶元素是否是左括号'('。如果是,则我们将栈顶元素出栈。如果不是,则说明我们遇到了最外层的右括号,我们将其保存在一个字符串中。
当我们遍历完整个字符串后,我们将栈中剩余的元素依次弹出,并将其保存在同一个字符串中。
最后,我们返回这个字符串,即为删除最外层的括号后的结果。
代码实现
def remove_outer_parentheses(s):
"""
删除最外层的括号
:param s: 给定的字符串
:return: 删除最外层的括号后的字符串
"""
stack = []
result = ""
for char in s:
if char == '(':
stack.append(char)
else:
if stack:
stack.pop()
else:
result += char
return result
if __name__ == '__main__':
s = "(()())"
print(remove_outer_parentheses(s)) # "()()"
s = "(())(())"
print(remove_outer_parentheses(s)) # "()()()"
s = "(()())(())"
print(remove_outer_parentheses(s)) # "()()()()"
s = "((()(())))"
print(remove_outer_parentheses(s)) # "()()"
s = "(()(((()))))"
print(remove_outer_parentheses(s)) # "()()"
总结
这道题的解题思路非常简单,我们可以使用栈来解决。
如果你对LeetCode算法题感兴趣,欢迎关注我,我会继续分享我刷算法题过程中的思路和心得。