新闻详情

新闻详情

首页 / 资讯中心 / 详情

[Leetcode 1190] 反转没对括号间的子串

发布时间:2026/9/28 20:50:57来源:尧图网络
[Leetcode 1190] 反转没对括号间的子串
一. 题目描述1.1 题干信息给出一个字符串 s仅含有小写英文字母和括号。请你按照从括号内到外的顺序逐层反转每对匹配括号中的字符串并返回最终的结果。注意您的结果中 不应 包含任何括号。1.2 示例输入s “(abcd)”输出“dcba”输入s “(u(love)i)”输出“iloveu”解释先反转子字符串 “love” 然后反转整个字符串。输入s “(ed(et(oc))el)”输出“leetcode”解释先反转子字符串 “oc” 接着反转 “etco” 然后反转整个字符串。1.3 提示1 ≤ s . l e n g t h ≤ 2000 1 \le s.length \le 20001≤s.length≤2000s 中只有小写英文字母和括号题目测试用例确保所有括号都是成对出现的二. 储备知识——栈2.1 参考视频这个栈的知识算是数据结构的很基础的内容了我当初是跟着王道学的数据结构所以没有其他的参考视频如果有需要的话可以参考王道bilibili教学视频链接如下:王道计算机考研 数据结构三. 出师不利3.1 初步想法最开始的确看到括号的匹配问题想到的就是栈的应用但是由于我用的是python, 所以懒得直接写栈了第一想法就是用双指针去匹配括号一个从前往后走一个从后往前走代码如下classSolution:defreverseParentheses(self,s:str)-str:front0rearlen(s)-1whilerear0:ifs[front])ands[rear](:ss[:rear1]s[front-1:rear:-1]s[front:]rear-1front-1elifs[front])ands[rear]!(:rear-1elifs[front]!)ands[rear](:front1else:rear-1front1# print(s)returns3个测试用例都通过了but出现了一个大bug交答案的时候总是说我index out of range, 怎么可能索引出界啊我看了代码没问题啊。然后我把答错的用例加入了测试用例中开始针对性该代码发现了一个疏忽不是所有的测试用例0号位置都是(“, -1号位置都是”)…嗯好的那就改吧。3.2 缝缝补补classSolution:defreverseParentheses(self,s:str)-str:front0lengthrearlen(s)-1whilerear0andfrontlength:ifs[front])ands[rear](:# print(fs[rear1: front] is {s[rear1: front]})# print(fs[front-1:rear:-1] is {s[front-1:rear:-1]})ss[:rear1]s[front-1:rear:-1]s[front:]# s[rear1: front] s[front-1:rear:-1]ss[:rear]s[rear1:front]s[front1:]rear-1front-1elifs[front])ands[rear]!(:rear-1elifs[front]!)ands[rear](:front1else:rear-1front1lengthlen(s)-1# print(s)returns这回感觉没问题了加了双指针的越界检测(好吧我是真的不规范正常用双指针就得直接把范围越界测试先写上)信心满满啊交卷嗯。。。解答错误这又为啥原来她这个两个对应的括号未必是全是一个覆盖一个的诶嘿夹带点私货听没听说过闭区间套定理那我给你介绍一下吧哈哈哈哈哈哈T h e o r e m \mathcal{Theorem}Theorem1.5.2 闭区间套定理设I n [ a n , b n ] ( n ∈ N ) I_n[a_n, b_n](n\in\mathbb{N}_{})In​[an​,bn​](n∈N​), 并且I 1 ⊃ I 2 ⊃ I 3 ⊃ ⋯ ⊃ I n ⊃ I n 1 ⊃ ⋯ I_1\supset I_2\supset I_3\supset\cdots\supset I_{n}\supset I_{n1}\supset\cdotsI1​⊃I2​⊃I3​⊃⋯⊃In​⊃In1​⊃⋯. 如果这一列区间的长度∣ I n ∣ b n − a n → 0 ( n → ∞ ) |I_n|b_n-a_n\rightarrow 0(n\rightarrow \infty)∣In​∣bn​−an​→0(n→∞), 那么交集⋂ n 1 ∞ I n \bigcap\limits_{n1}^{\infty} I_{n}n1⋂∞​In​含有唯一的一点。——常庚哲、史济怀《数学分析教程》嗯对的并不是所有测试用例都是类似闭区间套的情况所以还得改啊。四. 大获全胜最后能够完整通过所有测试用例的代码如下。classSolution:defreverseParentheses(self,s:str)-str:stacklist()nearest_listlist()top-1nearest-1foritemins:stack.append(item)top1ifitem(:nearest_list.append(top)elifitem):nearestnearest_list[-1]stack[nearest1:top]stack[top-1:nearest:-1]nearest_listnearest_list[:-1]resultforiinstack:ifinotin[(,)]:resultireturnresult五. 官方题解官方题解提供了两套不同的思路咱们一点点看5.1 栈方法首先就是利用栈的思想去进行字符串匹配如下。classSolution:defreverseParentheses(self,s:str)-str:stk[]stringforchins:ifch(:stk.append(string)stringelifch):stringstring[::-1]stringstk.pop()stringelse:stringchreturnstring5.2 预处理括号方法另一个就是利用预处理括号的方法, 如下。classSolution:defreverseParentheses(self,s:str)-str:nlen(s)pair[0]*n stk[]foriinrange(n):ifs[i](:stk.append(i)elifs[i]):jstk.pop()pair[i]j pair[j]i ret[]index0step1whileindexn:ifs[index](ors[index]):indexpair[index]step-stepelse:ret.append(s[index])indexstepreturn.join(ret)官方题解中有个pair列表这个是左右括号进行对应查询的pair[i] j; pair[j] i。实际上就是把左括号indx的值附上右括号反之亦然。确实是个不错的方法我最开始考虑括号对应赋值的想的用字典dict, 但是感觉有点麻烦就没继续思考下去。然后那个ret列表就很有意思题解中有个int变量step, 如果是1的话就正向读如果是-1的话就是负向读然后就能把题干中反反复复的倒置实现出来。六. 写在最后我始终认定一本好书比它的作者更富有智慧他能传达出作者没有意识到的东西。——翁贝托·艾柯
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

动态面板空间杜宾模型:从理论识别到效应分解的完整实战指南 2026/9/28 21:30:25

动态面板空间杜宾模型:从理论识别到效应分解的完整实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
FPGA实战:数字锁相环DPLL原理与Verilog实现详解 2026/9/28 21:30:10

FPGA实战:数字锁相环DPLL原理与Verilog实现详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
AWS Strands Harness 开源框架:AI 编程代理成本降低 45% 的架构解析与实操 2026/9/28 21:30:10

AWS Strands Harness 开源框架:AI 编程代理成本降低 45% 的架构解析与实操

1. 这个工具到底在解决什么问题AI 编程代理这个赛道,从 2024 年下半年开始就卷得不像话。Claude Code 和 Codex 这两家几乎占据了绝大多数开发者的日常使用场景,但真正把账单拉出来看的人都知道,按 token 计费的模式在重度使用下有多烧钱。一…

阅读更多 →
Cadence Virtuoso入门:一阶RC低通滤波器设计与仿真全流程解析 2026/9/28 21:29:49

Cadence Virtuoso入门:一阶RC低通滤波器设计与仿真全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Python+KNN手写拼音识别课程设计:图像预处理与分类实战 2026/9/28 21:29:28

Python+KNN手写拼音识别课程设计:图像预处理与分类实战

简介:面向高校机器学习课程设计场景,这份基于Python开发的手写拼音识别资源以KNN(K最近邻)算法为分类核心,覆盖从手写图像输入到拼音类别输出的完整流程。包体包含2589个文件,主体为1649个txt与924个jpg&am…

阅读更多 →
ESP32-C3中GPIO8/GPIO9的I2C硬件直连原理与实战应用 2026/9/28 21:29:22

ESP32-C3中GPIO8/GPIO9的I2C硬件直连原理与实战应用

1. 为什么GPIO8和GPIO9在ESP32-C3-Super-Mini上“不按常理出牌”?刚拿到ESP32-C3-Super-Mini开发板时,我第一反应是——这板子太小了,小到连USB口都得靠Type-C转接线才能插稳。但真正让我停下调试进度、反复翻手册的,不是它的尺寸…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉