首页 > 解决方案 > 如何从最里面的一对开始反转每对匹配括号中包含的字符串?代码战

问题描述

到目前为止,我已经做到了。我被困在递归上。我不知道如何前进,加入和倒车等。

def callrecursion(s):
    a=s.index('(')
    z=len(s) - string[::-1].index(')') -1
    newStr=s[a+1:z]
# Something is missing here i cant figure it out
    print(newStr)
    return newStr

def reverseParentheses(s):  
    if '(' in s:
        return reverseParentheses(callrecursion(s))        
        print('wabba labba dub dub')
    else:
        return s
string='a(bcdefghijkl(mno)p)q'
reverseParentheses(string)

预期输出:“apmnolkjihgfedcbq”

标签: pythonpython-3.x

解决方案


def reverseParentheses(s):
    if '(' in s:
        posopen=s.find('(')
        s=s[:posopen]+reverseParentheses(s[posopen+1:])
        posclose=s.find(')',posopen+1)
        s=s[:posopen]+s[posopen:posclose][::-1]+s[posclose+1:]
    return s

string='a(bcdefghijkl(mno)p)q'
print(string)
print(reverseParentheses(string))
print('apmnolkjihgfedcbq') # your test

string='a(bc)(ef)g'
print(string)
print(reverseParentheses(string))

这个想法是尽可能长时间地“向内”(“向内”甚至不意味着“嵌套”,只要有任何左括号就可以了),所以最里面的对首先翻转,然后其余的为递归返回。这种“平行”括号似乎也可以工作,而“第一个左括号”与“最后一个右括号”的简单配对并不能很好地处理它们。或者至少我是这么认为的。


顺便说一句:递归只是rfind这里的一个令人费解的替换:

def reverseParentheses(s):
    while '(' in s:
        posopen=s.rfind('(')
        posclose=s.find(')',posopen+1)
        s=s[:posopen]+s[posopen+1:posclose][::-1]+s[posclose+1:]
    return s;

(... TBH:现在我尝试了,递归魔法在字符串中的空括号中消失(),而这个有效)


推荐阅读