【华为在线笔试】字符串解压缩
程序员文章站
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
上一篇: Java-杨辉三角(YangHuiTriangle)
下一篇: 类与对象(2)