1. 程式人生 > >【華為線上筆試】字串解壓縮

【華為線上筆試】字串解壓縮

題目描述

將一段壓縮後的字串解壓縮,並且排序輸出。

解壓規則:

每個字串後面跟著一個數字,表示這個字串的重複次數。例如,”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