压缩的字母规则是,连续相同的字母串压缩成:连续的个数 +[字母串]。如 aaa,压缩成:3[a];amamam 压缩成 3[am]。
请实现解压缩字符串功能。实现程序语言不限制。完成时间两个小时,过程不能看手机,不能切屏。
自测样例,输入:3[k] 2[am] 预期输出:kkkamam
输入:2[k3[am]] 预期输出:kamamamkamamam

虽然我做了一下,结果调试没有问题,但是和最终结果还是有出入。大家可以自己做做。看是不是只有我觉得这个题目难,还是我太 low 了。
以下是我的实现,基于 python3.6:

import re
from string import digits

def untar_word(word,num):
    '''
    解压字符
    :param word:
    :param num:
    :return:
    '''
    re_word = ''
    for i in range(0,num):
        re_word = re_word + word
    return re_word

def get_number(word):
    '''
    提取数值list
    :param word:
    :return:
    '''
    return re.findall(r'\d+',word)

def del_digit(word):
    '''
    去除字符串中的数值
    :param word:
    :return:
    '''
    return word.translate(str.maketrans('', '', digits))

def deal_word(word):
    '''
    处理word
    :param word:
    :return:
    '''
    list_number = get_number(word)
    new_words = del_digit(word)
    deal_times = 0
    a = -1 #记录处理的第几个压缩字符串
    leve = 0
    while True:
        if deal_times == len(list_number):
            break
        else:
            for i in range(0,len(new_words)):
                if new_words[i] ==  '[':
                    a = a + 1
                    leve = leve + 1
                    mark = i
                if new_words[i] == ']':
                    num = int(list_number[a])
                    word = new_words[(mark + 1):i]
                    new_words = new_words[0:mark] + untar_word(word,num) + new_words[i+1:]
                    deal_times = deal_times + 1
                    if leve > 1:
                        a = -1
                    break
    return new_words

if __name__ == "__main__":
    tar_word1 = '3[k]2[am]'
    tar_word2 = '2[k3[am]]'
    print(deal_word(tar_word1))
    print(deal_word(tar_word2))


↙↙↙阅读原文可查看相关链接,并与作者交流