华为OD机试之报文重排序(Java源码)

题目描述

对报文进行重传和重排序是常用的可靠性机制,重传缓中区内有一定数量的子报文,每个子报文在原始报文中的顺序已知,现在需要恢复出原始报文。

输入描述

输入第一行为N,表示子报文的个数,0 <N ≤ 1000。

输入第二行为N个子报文,以空格分开,子报文格式为:

字符审报文内容+后缀顺序索引

字符串报文内容由[a-z,A-Z]组成,后缀为整型值,表示顺序。

顺序值唯一,不重复。

输出描述

输出恢复出的原始报文,按照每个子报文的顺序的升序排序恢复出原始报文,顺序后缀需要从恢复出的报文中删除掉

用例

|----|--------------------------------------------------------------------------------------------------------|
| 输入 | 4 rolling3 stone4 like1 a2 |
| 输出 | like a rolling stone |
| 说明 | 4个子报文的内容分别为 "rolling","stone","like","a",顺序值分别为3,4,1,2,按照顺序值升序并删除顺序后缀,得到恢复的原始报文:"like a rolling stone" |

|----|-------------------------------------------------------------|
| 输入 | 8 gifts6 and7 Exchanging1 all2 precious5 things8 kinds3 of4 |
| 输出 | Exchanging all kinds of precious gifts and things |
| 说明 | 无 |

具体解析看代码逻辑

示例代码

java 复制代码
package com.bytesoc.calc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class T71 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.nextLine());
		List<Integer> orderList = new ArrayList<>();
		Map<Integer, String> wordMap = new HashMap<Integer, String>();
		String input = sc.nextLine();
		String wordArr[] = input.split(" ");
		for (int i = 0; i < wordArr.length; i++) {
			String word = wordArr[i];
			// 截取尾部的数字
			String numStr = "";
			String last = word.charAt(word.length() - 1) + "";
			Integer number = -1;
			try {
				while (word.length() > 0) {
					int nS = Integer.parseInt(last);
					numStr = nS + numStr;
					StringBuilder sb = new StringBuilder(word);
					sb.setCharAt(word.length() - 1, ' ');
					word = sb.toString().trim();
					last = word.charAt(word.length() - 1) + "";
				}
			} catch (Exception e) {
				number = Integer.parseInt(numStr);
			}
			String content = word.replace(numStr, "");
			orderList.add(number);
			wordMap.put(number, content);
		}
		orderList.sort((a, b) -> a - b);
		for (Integer key : orderList) {
			System.out.print(wordMap.get(key) + " ");
		}
	}
}

执行结果:

相关推荐
invicinble6 分钟前
对于泛型的设计思路
java
威迪斯特8 分钟前
Gorilla框架:Go语言生态中的模块化开发利器
运维·开发语言·后端·golang·web框架·维护·gorilla
格林威8 分钟前
面阵相机 vs 线阵相机:堡盟与海康相机选型差异全解析 附C# 实战演示
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
A_aspectJ15 分钟前
【Java基础开发】基于 Java Swing 开发的简易计算器 - 支持键盘
java·开发语言
光影少年17 分钟前
vite+rust生态链工具链
开发语言·前端·后端·rust·前端框架
skywalk816318 分钟前
当前有什么流行的lisp的web框架吗?
开发语言·前端·lisp
2501_9130613419 分钟前
网络原理知识(7)
java·网络·面试
天若有情67320 分钟前
C++进阶:普通重载运算符 vs 隐式类型转换重载运算符,一篇讲透区别
开发语言·c++·算法
南境十里·墨染春水23 分钟前
linux学习进程 线程同步——读写锁
java·jvm·学习
ZWZhangYu23 分钟前
MCP 实战:从协议原理到 Java 自定义工具服务落地
java·开发语言·人工智能