华为第二道笔试题2019年4月11日(字符串括号)

# -*- coding: utf-8 -*-
"""
Created on Wed Apr 10 18:53:35 2019

@author: CommissarMa
华为今天的笔试题:
给定一个字符串,包含数字,大小写字母及括号(大括号、中括号、小括号),括号可以嵌套,即括号里可以出现数字何括号
按照如下规则对字符串进行展开,不需要考虑括号成对不匹配问题,用例保证括号匹配,同时用例保证每个数字后面都有括号,
不用考虑数字后面没有括号的情况
1)数字表示括号里的字符串重复的次数,展开后的字符串不包括括号。
2)将字符串进行逆序展开

示例1:
输入:abc3(A)
输出:AAAcba
"""

"""
我的解题思路:
1)对于读到的字符串、数字和左括号,依次入栈;
2)然后读到右括号时,从栈中pop出到左括号为止的所有字符串并进行拼接,然后pop出对应的数字进行,相乘得到的新字符串再入栈
3)重复1)和2),即为正序的解,再逆序即可。
"""

string=input()
str_list=list(string)

stack=[]
temp_str=''
temp_num=''
for c in str_list:
    if 'a'<=c<='z' or 'A'<=c<='Z':
        temp_str+=c
    elif '0'<=c<='9':
        if temp_str!='':
            stack.append(temp_str)
            temp_str=''
        temp_num+=c
    elif c in ['(','[','{']:
        stack.append(int(temp_num))
        temp_num=''
        stack.append(c)
    elif c in [')',']','}']:
            if temp_str!='':
                stack.append(temp_str)
                temp_str=''
            new_sub_str=''
            last_str=stack.pop()
            while last_str not in ['(','[','{']:
                new_sub_str=last_str+new_sub_str
                last_str=stack.pop()
            last_kuohao=last_str
            last_num=stack.pop()
            stack.append(last_num*new_sub_str)
result=''.join(stack)+temp_str
print(result[::-1])

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值