压缩的字母规则是,连续相同的字母串压缩成:连续的个数 +[字母串]。如 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))