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

时间:2023-01-17 07:59:46


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

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

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

问题描述:

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

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


解题思路:

> 定义一个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);
}
}