【華為線上筆試】字串解壓縮
阿新 • • 發佈:2019-01-01
題目描述
將一段壓縮後的字串解壓縮,並且排序輸出。
解壓規則:
每個字串後面跟著一個數字,表示這個字串的重複次數。例如,”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