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

相关内容

热门资讯

中信重工申请矿样试验装置相关专... 4月18日消息,国家知识产权局信息显示,中信重工机械股份有限公司申请一项名为“一种定量微细粒矿样柔性...
刺破“开票经济”的数字泡沫 最新发票数据显示,截至3月25日,今年违规招商引资企业较为集中的废弃资源综合利用、再生物资回收等六类...
兰州:筑牢食品药品安全防线 食品药品安全事关百姓身体健康和生命安全。自全省“三抓三促”行动开展以来,兰州市市场监督管理局聚焦食品...
同济等3家公司共同取得爆管侦测... 4月18日消息,国家知识产权局信息显示,同济大学、宁波水表(集团)股份有限公司、浙江宁水水务科技有限...
【聚焦教育家精神巡回宣讲】聆听...   4月16日,贵州省2026年教育家精神巡回宣讲暨“讲述我的育人故事”贵安大学城专场活动在贵州财经...