NI机试题

题目:

        比如有个字符串“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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值