如何从最里面的一对开始反转每对匹配括号中包含的字符串?暗斗

2024-10-02 16:21:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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”


Tags: stringindexlenreturnhereisdefdub
2条回答
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这里的一个复杂的替代: ^{pr2}$

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

您的代码中有一些问题,并且缺少很多逻辑。这将调整代码并生成所需的输出:

def callrecursion(s):
    a=s.index('(')
    # 's' not 'string'
    z=len(s) - s[::-1].index(')') -1

    newStr=s[a+1:z][::-1]

    # Need to consider swapped parentheses
    newStr=newStr.replace('(', "$") # Placeholder for other swap
    newStr=newStr.replace(')', "(")
    newStr=newStr.replace('$', ")")

    #Need to recombine initial and trailing portions of original string
    newStr = s[:a] + newStr + s[z+1:]

    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'

print(reverseParentheses(string))
>>>apmnolkjihgfedcbq

相关问题 更多 >