持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。 怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
1 <= s.length <= 105s[i]为'('或')'s是一个有效括号字符串
二、思路分析:
我们阅读本题题意,要求对给出的字符串s进行去掉外围的括号并返回新的结果。
我们来理清一下概念,什么是有效括号与无效括号?
- 有效括号:左括号
(和右括号)组成。如(),(())这样的。 - 无效括号:左括号
(和右括号)顺序反了,或者缺少其中一个。如)(、(()、()) - 无括号:空字符。""
题目中提到字符串s是原语的概念是什么意思?
- 原语:不可拆分的有效括号如
(()()) - 非原语:可拆分的有效括号如
()()(())
我们来理一下,解答该题目,可以使用栈的思维:
- 定义一个列表tmp,来负责存储左括号
( - 遍历字符串s每一个元素
- 当
s[i]== ")",tmp 将推出s[i] - 当 tmp 不为空,则 res = res +
s[i] - 当
s[i]== "(" ,将s[i]添加到 tmp 列表
- 当
如图所示,我们根据上述思路实现代码如下:
class Solution(object):
def removeOuterParentheses(self, s):
"""
:type s: str
:rtype: str
"""
tmp = []
res = ""
for i in range(len(s)):
if s[i] == ")":
tmp.pop()
if tmp :
res = res + s[i]
if s[i] == "(":
tmp.append(s[i])
return res
三、总结:
本题,考察我们栈,先进后出的思想。当然判断条件的顺序也要注意,AC记录如下:
- 时间复杂度O(N),N为字符串长度
- 空间复杂度O(N),要使用列表来入栈出栈
以上是本期内容,欢迎大佬们点赞评论,下期见~~~