对报文进行重传和重排序是常用的可靠性机制,重传缓冲区内有一定数量的子报文,每个子报文在原始报文中的顺序已知,现在需要恢复出原始报文。
输入第一行为N,表示子报文的个数,0 < N <= 1000。
输入第二行为N个子报文,以空格分开,子报文格式为字符串报文内容+后缀顺序索引,字符串报文内容由[a-z,A-Z]组成,后缀为整形值,表示顺序。顺序值唯一,不重复。
输出恢复出的原始报文。
按照每个子报文的顺序的升序排序恢复出原始报文,顺序后缀需要从恢复出的报文中删除掉。
题目要求根据子报文的顺序索引恢复出原始报文。子报文由报文内容和顺序索引组成,报文内容是字符串,顺序索引是整数。
解题思路如下:
解题思路分析:
该算法首先将输入的子报文解析并存储到哈希表中,哈希表的键为顺序索引,值为报文内容。然后按照顺序从1到N依次从哈希表中取出报文内容,将其拼接到结果字符串中。最终输出结果字符串作为恢复出的原始报文。算法的时间复杂度为O(N),其中N为子报文的个数。
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
sc.nextLine();
String[] strings = sc.nextLine().split(" ");
Map<Integer, String> letterMap = new HashMap<>();
for(int i=0; i<strings.length; i++){
String str = strings[i];
//防止空格
if(str.equals("")){
continue;
}
//数字开始的下标
int index = 0;
for(int j=0; j<str.length(); j++){
if(Character.isDigit(str.charAt(j))){
index = j;
break;
}
}
//字母部分
String letter = str.substring(0, index);
//顺序部分
int num = Integer.parseInt(str.substring(index));
letterMap.put(num, letter);
}
String res = "";
for(int i=1; i<=N; i++){
res += letterMap.get(i) + " ";
}
System.out.println(res.substring(0, res.length() - 1));
}
}
6
nezha1,study2,java3,is4,very5,good6
nezhastudyjavaisverygood
下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。