这里的问题要求我反转()中的任何字符串。假设字符串是"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会检测start=3,end=11,然后我们调用函数rab,我们就会得到"foozab(rab)blim“。再次遍历函数,有了新的start=6,end=10。最后,我们得到了"foozabbarblim“,而不是我们期望的"foobazrabblim”。我想知道程序是如何先检测到外部")“的?
发布于 2019-01-20 09:12:29
它没有检测到最外面的圆括号。它找到最里面的一对,颠倒内部,然后重复直到没有更多的括号。
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最里面的圆括号被颠倒了。
https://stackoverflow.com/questions/54272713
复制相似问题