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”
解决方案
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:现在我尝试了,递归魔法在字符串中的空括号中消失()
,而这个有效)
推荐阅读
- ruby-on-rails - 黄瓜测试按钮按下并且没有成功更新页面
- ms-access - 如何在 ms Access 2007 组合框中选择单个项目或所有项目
- http - 为什么我们在 websocket 握手响应中使用 \n\r ?
- android - Firebase 在应用消息传递实现中与 gradling 相关的编译错误
- excel - 网页抓取到 Excel 文件中
- laravel - Laravel 在 intersect 方法之上分页
- java - 预定注解和自定义 StringResolver
- java - JSVC re-exec 需要使用绝对或相对路径执行
- android - 播放单轨Spotify SDK
- php - 我无法获取与 DOMXpath 一起排列的 url 的 html 内容