【华为OD机试】真题B卷-报文重排序(Python)
华为OD机试真题汇总目录
【华为OD机试】真题汇总A+B+C+D券(Python实现)
一、题目
题目描述:报文重排序
对报文进行重传和重排序是常用的可靠性机制,重传缓冲区内有一定数量的子报文,每个子报文在原始报文中的顺序已知,现在需要恢复出原始报文。
二、输入输出
输入描述:
输入第一行为N,表示子报文的个数,0 < N <= 1000。 输入第二行为N个子报文,以空格分开,子报文格式为
字符串报文内容+后缀顺序索引,
字符串报文内容由|a-z,A-Z)组成后缀为整形值,表示顺序。
顺序值唯一,不重复。
输出描述:EN输出恢复出的原始报文。按照每个子报文的顺序的升席排序恢复出原始报文,顺序后缀需要从恢复出的报文中删除掉
三、示例
用例1:
输入:
4
rolling3 stone4 like1 a2
输出:
like a rolling stone
说明: 4个子报文的内容分别为roling,stone,like,a,顺序值分别为3,4,1,2,按照顺序值升序并删除掉顺序后缀得到恢复的原始报文: like a rolling stone
用例2:
输入:
8
Lgifts6 and7 Exchanging1 all2 precious5 things8 kinds3 of4
// 注: 这里需要注意:and7与Exchanging1有两个空格
输出:
Exchanging all kinds of precious gifts and things
四、解题思路
- 从标准输入获取整数
n
和一个包含字符串的数组。process_input
函数处理输入数组,使用正则表达式匹配字符串中的字母和数字部分,并按数字部分排序。- 创建一个空列表
result
来存储匹配结果。- 遍历输入数组,对每个字符串进行匹配,提取内容和索引,将它们作为列表
[index, content]
添加到result
中。- 对
result
列表按照索引排序。- 使用
map
函数提取排序后的内容,并用空格连接起来。- 最后打印输出处理后的结果。
五、参考代码
# -*- coding: utf-8 -*-
'''
@Time : 2023/12/10 00:09:00
@Author : mgc
@Version : 1.0
@Desc : None
'''
# import os
# import re
# import sys
# import copy
# import math
# import queue
# import functools
# from queue import Queue
# from collections import Counter, defaultdict
import re
# 获取输入
n = int(input())
input_arr = input().split()
# 算法入口
def process_input():
result = []
pattern = re.compile(r"([a-zA-Z]+)(\d+)")
for string in input_arr:
match = pattern.search(string)
if match is None:
continue
content = match.group(1)
index = int(match.group(2)) - 1
result.append([index, content])
result.sort(key=lambda x: x[0])
return " ".join(map(lambda x: x[1], result))
# 调用算法
print(process_input())