python - 为什么代码检测到最外层)
问题描述
这里的问题要求我反转 () 内的任何字符串。假设我的字符串是“foo(bar(baz))blim”,那么返回的结果就是“foobazrabblim”。有人帮助我完成了编码过程,但是,我仍然不明白为什么代码首先检测外部 )。
def reverseInParentheses(inputString):
n=len(inputString)
for i in range(n):
if inputString[i] == "(":
start=i
if inputString[i] == ")":
end=i
return reverseInParentheses(inputString[:start]+
inputString[start+1:end][::-1]+inputString[end+1:n])
return inputString
据我了解,假设我们有“foo(bar(baz))blim”。所以python检测开始= 3,结束= 11。然后我们调用函数 reverseinparetheses,我们将得到“foozab(rab)blim”。再过一遍函数,有新的start=6,end=10。最后,我们得到了“foozabbarblim”,而不是我们期望的“foobazrabblim”。我想知道程序如何首先检测外部“)”?
解决方案
它没有检测到最外面的括号。它找到最里面的一对,反转里面,然后重复直到没有更多的括号。
if inputString[i] == ")":
....
当你击中第一个')'时,这个块会触发,在那个阶段start
将是打开第一个')'的'('。这是最里面的一对。
然后你有:
return reverseInParentheses(inputString[:start]+inputString[start+1:end][::-1]+inputString[end+1:n])
这将内容从开始到结束(最里面的对)反转,然后调用函数,切断 for 循环的其余部分。
如果您inputString
在每个步骤中实际打印,您会得到:
foo(bar(baz))blim
foo(barzab)blim
foobazrabblim
最里面的括号被颠倒了。
推荐阅读
- google-apps-script - 我可以将工作表下载到特定的计算机硬盘驱动器,或者将备份和同步中的工作表移动到硬盘驱动器吗?
- sql - 如何检查服务器上是否存在给定的数据库?
- jupyter-notebook - Jupyter 实验室无法启动
- c++ - _mm256_permutexvar_epi8 和 _mm256_permutexvar_epi16 AVX2 等价物用于编译时间常数洗牌吗?
- html - 悬停时暂停向上滚动
- python - 将 'path('accounts/',include('django.contrib.auth.urls'))' 添加到 django 项目的 urls.py 文件有什么意义?
- javascript - ext.grid.editorgridpanel 验证是否存在两个重复的行数据
- reactjs - 将 React 复选框的值作为布尔值/文本发送到 MongoDB 数据库
- java - 程序仍然抛出 InputMismatchException 并退出,即使它被捕获
- oracle - 使用 oracle/PLSQL 进行密码加密的 PDF