赞
踩
对报文进行重传和重排序是常用的可靠性机制,重传缓中区内有一定数量的子报文,每个子报文在原始报文中的顺序已知,现在需要恢复出原始报文。
输入第一行为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 |
说明 | 无 |
本题属于简单的字符串操作,只需要熟悉常见的数据结构和排序即可。可以使用正则或者后序遍历的方式取出每个单词的后的数值,从而对单词进行排序即可。
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) + " "); } } }
代码只提供编程思路,未经过官方实例测试
执行示例:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。