第十一届省赛——9字符串编码
创始人
2024-06-02 08:41:11

题目:

本题总分:25 分

【问题描述】

小明发明了一种给由全大写字母组成的字符串编码的方法。

对于每一个大写字母,小明将它转换成它在 26 个英文字母中序号,

即 A → 1, B → 2, … Z →26。

这样一个字符串就能被转化成一个数字序列:

比如 ABCXYZ → 123242526。

现在给定一个转换后的数字序列,小明想还原出原本的字符串。

当然这样的还原有可能存在多个符合条件的字符串。小明希望找出其中字典序最大的字符串。

【输入格式】

一个数字序列。

【输出格式】

一个只包含大写字母的字符串,代表答案

【样例输入】

123242526

【样例输出】

LCXYZ

【评测用例规模与约定】

对于 20% 的评测用例,输入的长度不超过 20。

对于所有评测用例,输入的长度不超过 200000。

分析:

我们先把扫描器输入的内容转为char数组,然后用n索引记录用来,如果第一项是0那么直接忽略,第一项1-9那么这一项,连上后一项,再integer.parseint转为int判断是不是小于26,如果小于26那么直接加入集合中,如果大于27那么只加入一项到集合中,直到加到最后一项直接加入就结束了

步骤:

package 第十一届省赛;import java.util.ArrayList;
import java.util.Scanner;public class 字符串编码 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);char[] ch = sc.next().toCharArray();// 扫描器出来直接转为char数组ArrayList arr = new ArrayList<>();int n = 0;// 用来记录第几个while (n < ch.length) {// 只要个数小于数组长度if (ch[n] == '0') {// 数字等于0时不输出,个数加一n++;}if (n + 1 < ch.length) {//只要不是最后一项int temp = Integer.parseInt("" + ch[n] + ch[n + 1]);//前两项通过字符串连在一块if (temp < 27) {arr.add("" + (char) (temp + 'A' - 1));//前两项长度小于26n += 2;//记录个数加二} else {arr.add("" + (char) (Integer.parseInt(ch[n] + "") + 'A' - 1));//够了27那么直接加入第一项n++;}} else {//是最后一项就直接加入集合进去arr.add("" + (char) (Integer.parseInt(ch[n] + "") + 'A' - 1));n++;}}for (int i = 0; i < arr.size(); i++) {//遍历集合内的System.out.print(arr.get(i));}}}
                
            
            
            

相关内容

热门资讯

投资者提问:请问董秘,当前中日... 投资者提问:请问董秘,当前中日关系陷入僵局乃至谷底之际,公司有规划更多使用国产光刻胶等材料来替代日系...
富德生命人寿咸阳中心支公司被罚... 12月16日金融一线消息,据咸阳金融监管分局行政处罚信息公开表显示,富德生命人寿保险股份有限公司咸阳...
市场监管总局:抓紧推进出台《互... 转自:北京日报客户端记者16日从市场监管总局获悉,市场监管总局正抓紧推进《互联网平台反垄断合规指引》...
天奇股份:锂电循环业务夯实产业... 12月16日,江西天奇金泰阁集团(简称“天奇金泰阁”)资本赋能发展大会在江西龙南举行。会上,天奇股份...
「侠客岛」他们用上了“AI分身...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! (来源:海外网)来源...