第十一届省赛——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));}}}
                
            
            
            

相关内容

热门资讯

米莱取消访问英国 据埃菲社9月10日报道,阿根廷总统米莱取消了原定于10月访问英国的行程。此前,因他宣布对在马尔维纳斯...
印尼9月干旱持续 火点已超50... 格隆汇9月11日|印尼在应对山火与浓重烟霾方面或将面临更严峻的挑战,因为异常干燥的天气将持续至本月底...
梅卡曼德邵天兰批评“攒局型”具... 21世纪经济报道记者周慧9月10日,“具身智能眼脑手第一股”梅卡曼德创始人兼CEO邵天兰的微信朋友圈...
2025年我国新发现非油气矿产... 来源:新华网新华社天津9月11日电(记者黄江林、宋瑞)11日,在天津举行的2026中国国际矿业大会上...
“‘支联会’煽动颠覆国家政权”... 9月11日上午10时,香港西九龙裁判法院(暂代高等法院)对已经解散的反中乱港组织“支联会”及其头目李...