题目:
比如有个字符串“a(bc(de))fg",依次将括号里面的字符串进行翻转。首先,将最内层的(de)进行翻转之后得到新的字符串“a(bced)fg”,然后再将最外层括号中的字符串进行翻转后得到最终结果“adecbfg”。
思路:
首先将字符串转换为list集合以方便之后的处理。这里我们需要先找到匹配的括号,然后才能对括号中的字符做相应的翻转操作。那就需要一个用来存放括号位置的变量,而且括号必须要一一对应起来。这里用栈来完成存放括号,依次遍历list集合中的元素,当遇到‘(’时,进栈。当遇到“)”时,出栈。返回出栈时“(”的位置信息,这就是与刚才“)”所匹配的左半括号。两个括号之间的字符即为要翻转的元素。将要翻转的字符左括号以前的字符存入left集合中,将要翻转的字符右括号之后的字符存入right中,翻转之后的中间字符存放在temp集合中,接着将left、temp、right依次按顺序拼接起来。然后向后依次进行。。。最后字符list集里面会带有括号,这个时候再将括号去掉就OK了。
代码:
def get(strlist):
for i in range(len(strlist)):
if strlist[i] =='(':
s.append(i)
if strlist[i] ==')':
j = s.pop()
left = strlist[:j]
right = strlist[i+1:]
temp = strlist[j:i+1]
temp.reverse()
print (left)
print (temp)
print (right)
strlist = left+temp+right
print(strlist)
return strlist
str = "a(bc(de))fg"
strlist = list(str)
s = []
resultlist = []
solist = get(strlist)
for i in solist:
if i !='(' and i!=')':
resultlist.append(i)
result = "".join(resultlist)
print(resultlist)
print(result)
调试结果:
['a', '(', 'b', 'c'] [')', 'e', 'd', '('] [')', 'f', 'g'] ['a', '(', 'b', 'c', ')', 'e', 'd', '(', ')', 'f', 'g'] ['a'] [')', '(', 'd', 'e', ')', 'c', 'b', '('] ['f', 'g'] ['a', ')', '(', 'd', 'e', ')', 'c', 'b', '(', 'f', 'g'] ['a', 'd', 'e', 'c', 'b', 'f', 'g'] adecbfg