欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【华为在线笔试】字符串解压缩

程序员文章站 2022-04-05 16:09:05
...

题目描述

将一段压缩后的字符串解压缩,并且排序输出。

解压规则:

每个字符串后面跟着一个数字,表示这个字符串的重复次数。例如,”a5”解压后的结果为”aaaaa”;’abc3’解压后的结果为”abcabcabc”。

排序规则:

1、根据每个字符串的重复次数升序排序,然后输出结果。例如,”a3b2”,输出的结果为”bbaaa”。
2、如果字符重复次数一样,则根据ASCII编码顺序做升序排序,然后输出结果。例如,”b2a2”,输出的结果为”aabb”。

输入描述:

输入的原始字符串仅包含字母与数字

输出描述:

输出的结果字符串仅包含字母

示例1

输入

a11b2bac3bad3abcd2

输出

abcdabcdbbbacbacbacbadbadbadaaaaaaaaaaa

注:原题给的示例输出结果有问题,abcd和b数量虽然都为2,但abcd的ASCII码小于b,所以先输出abcd。

原题手机拍摄画面

【华为在线笔试】字符串解压缩
【华为在线笔试】字符串解压缩

Python3代码

def unzip(str1):
    index_list = []
    index_list2 = []
    # 找到所有字母索引
    for i in range(len(str1)):
        if str1[i].isalpha():
            index_list.append(i)
    # 将字母分段
    num_list = []
    #num_list.append(index_list[0])
    for i in range(len(index_list)-1):
        num_temp = []
        length = index_list[i+1] - index_list[i]
        if (length) > 1:
            for j in range(1, length):
                num_temp.append(index_list[i]+j)

        num_list.append(num_temp)
    temp = []
    temp.append(len(str1)-1)
    num_list.append(temp)

    #for i in num_list:
    #    if 0 == len(i):
    #        num_list.remove(i)
    while [] in num_list:
        num_list.remove([])
    #print(str1)
    #print(num_list)
    # 获得数字
    result_num_list = []
    for i in num_list:
        len_temp = len(i)
        if len_temp <= 1:
            #print(str1[i[0]])
            result_num_list.append(int(str1[i[0]]))
        else:
            sum1 = 0
            for j in range(len_temp):
                sum1 += int(str1[i[j]]) * 10**(len_temp-j-1)

            result_num_list.append(sum1)

    #result_num_list.append(int(str1[len(str1)-1]))
    #print(result_num_list)


    # 获得字符串
    num_list2 = num_list[:]
    tt = []
    tt.append(0)
    num_list2.insert(0,tt)
    #print(num_list2)
    #print(index_list)
    result_str_list = []
    result_str_list.append(str1[0])
    for i in range(len(num_list2)-1):
        length = num_list2[i+1][0] - num_list2[i][-1]
        start = num_list2[i][-1]
        temp2 = ""
        for j in range(length-1):
            temp2+=str1[start+j+1]
        result_str_list.append(temp2)

    while '' in result_str_list:
        result_str_list.remove('')
    #print(result_str_list)

    # 构建字典
    result_dic = dict(zip(result_str_list,result_num_list))
    sort_dic = zip(result_dic.values(),result_dic.keys())
    sort_dic = sorted(sort_dic)

    result = ""
    for i in range(len(sort_dic)):
        for j in range(sort_dic[i][0]):
            result += sort_dic[i][1]

    return result


str1 = input("")

result = unzip(str1)
print(result)

测试结果

a5
aaaaa

a3b2
bbaaa

b2a2
aabb

a11b2bac3bad3abcd2
abcdabcdbbbacbacbacbadbadbadaaaaaaaaaaa