蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:8.字符串编码

不要自卑,去提升实力
互联网行业谁技术牛谁是爹
如果文章可以带给你能量,那是最好的事!请相信自己
加油o~

在这里插入图片描述

点击下面链接
蓝桥杯历届真题题目+解析+代码+答案(2013-2020)(JavaA、B、C组)

问题描述:

问题描述
小明发明了一种给由全大写字母组成的字符串编码的方法。
对于每一个大写字母,小明将它转换成它在 26 个英文字母中序号,即 A → 1, B → 2, … Z →26。
这样一个字符串就能被转化成一个数字序列:比如 ABCXYZ → 123242526。
现在给定一个转换后的数字序列,小明想还原出原本的字符串。
当然这样的还原有可能存在多个符合条件的字符串。
小明希望找出其中字典序最大的字符串。
输入格式
一个数字序列。
输出格式
一个只包含大写字母的字符串,代表答案
样例输入
123242526
样例输出
LCXYZ
评测用例规模与约定
对于 20% 的评测用例,输入的长度不超过 20。
对于所有评测用例,输入的长度不超过 200000。

在这里插入图片描述
解题思路:

> 定义一个arr数组存取26个英文字母,便于使用,对应位置存储
> 首先遍历数列,如果第一个数+第二个数<=26,说明存在字典序更大的字母
> 这样添加后记得i++,因为i向后移动了一位
> 否则添加原位置的字母
> 注意判断i+1是否越界

代码:

public class Main {
	public static char[] arr= {
			'0',
			'A', 'B', 'C', 'D', 'E', 'F', 'G', 
			'H', 'I', 'J', 'K', 'L', 'M', 'N', 
			'O', 'P', 'Q', 'R', 'S', 'T', 'U',
			'V', 'W', 'X', 'Y', 'Z'
	};
    public static void main(String[] args){
    	Scanner sc=new Scanner(System.in);
    	String string=sc.next();
    	String res="";
    	for(int i=0;i<string.length();i++) {
    		if(i+1<string.length()) {
    			int x=(string.charAt(i)-'0')*10+(string.charAt(i+1)-'0');
    			if(x<=26) {
    				res+=new String().valueOf(arr[x]);
    				i++;
    			}
    			else {
    				res+=new String().valueOf(arr[string.charAt(i)-'0']);
        		}
    		}
    		else {
    			res+=new String().valueOf(arr[string.charAt(i)-'0']);
    		}
    	}
    	System.out.println(res);
	} 
}
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海洋 之心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值