首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么代码检测的是最外层的)

问为什么代码检测的是最外层的)
EN

Stack Overflow用户
提问于 2019-01-20 09:04:07
回答 1查看 111关注 0票数 3

这里的问题要求我反转()中的任何字符串。假设字符串是"foo(bar(baz))blim",那么返回的结果就是"foobazrabblim“。有人帮助我完成了编码过程,然而,我仍然不明白为什么代码要先检测外部)。

代码语言:javascript
复制
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会检测start=3,end=11,然后我们调用函数rab,我们就会得到"foozab(rab)blim“。再次遍历函数,有了新的start=6,end=10。最后,我们得到了"foozabbarblim“,而不是我们期望的"foobazrabblim”。我想知道程序是如何先检测到外部")“的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-20 09:12:29

它没有检测到最外面的圆括号。它找到最里面的一对,颠倒内部,然后重复直到没有更多的括号。

代码语言:javascript
复制
if inputString[i] == ")":
    ....

当你点击第一个')‘时,这个代码块就会触发,在那个阶段,start将是打开第一个')’的'(‘。这是最里面的一对。

然后你就有了:

代码语言:javascript
复制
return reverseInParentheses(inputString[:start]+inputString[start+1:end][::-1]+inputString[end+1:n])

这会从头到尾颠倒内容(最里面的一对),然后调用函数,切断for循环的其余部分。

如果在每个步骤中实际打印inputString,则会得到以下结果:

代码语言:javascript
复制
foo(bar(baz))blim
foo(barzab)blim
foobazrabblim

最里面的圆括号被颠倒了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54272713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档