问题描述:
问题描述
小明发明了一种给由全大写字母组成的字符串编码的方法。
对于每一个大写字母,小明将它转换成它在 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); } }