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

相关内容

热门资讯

投资者提问:董秘你好,请问公司... 投资者提问:董秘你好,请问公司有脑机工程相关的产品或布局吗?董秘回答(复星医药SH600196):投...
投资者提问:公司积极开拓海外市... 投资者提问:公司积极开拓海外市场,请问近两年是否出口欧盟国家?董秘回答(南芯科技SH688484):...
投资者提问:公司走成这样,管理... 投资者提问:公司走成这样,管理层怎么办董秘回答(南芯科技SH688484):您好,谢谢投资者对公司的...
过敏预警、旅游规划……天气预报... (来源:中国妇女网)转自:中国妇女网1月初,气象预报显示,天津市将接连出现两次弱冷空气过程。同时,天...
古蜀人是华夏子孙吗?由三星堆看... (来源:上观新闻)《英雄祖先与弟兄民族》是历史人类学家王明珂的“华夏边缘”系列研究之一,是《华夏边缘...