字符串编码
问题描述
小明发明了一种给由全大写字母组成的字符串编码的方法。对于每一个大
写字母,小明将它转换成它在 26 个英文字母中序号,即 A → 1, B → 2, … Z →
26。
这样一个字符串就能被转化成一个数字序列:
比如 ABCXYZ → 123242526。
现在给定一个转换后的数字序列,小明想还原出原本的字符串。当然这样
的还原有可能存在多个符合条件的字符串。小明希望找出其中字典序最大的字
符串。
思路解析
不太理解题目中的字典序,根据示例理解应该是不用判断数字长度的,否则题目就很简单了
代码如下
public class test8 {
static String s[];
static int arr[];
static String str="";
static String str1="";
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String n = sc.nextLine();
s = n.split("");
arr=new int[s.length];
for (int i = 0; i < s.length; i++) {
arr[i]=Integer.parseInt(s[i]);
}
result(arr.length);
str=str+str1;
System.out.println(str);
}
public static void result(int length) {
//如果末尾为零,那么先将末尾和末尾前一个的值组成两位数,再转化成字母
if (arr[length-1]==0) {
//注意将str1写在后面
str1=change(arr[length-1]+arr[length-2]*10)+str1;
result(length-2);
}else {
int i=0;
while (i<length) {
//优先转化两位数的字母
//判断i+i是会否越界
//if (arr[i]*10+arr[i+1]<=26&&i<length-1) {第一次写成这样
if (i<length-1&&arr[i]*10+arr[i+1]<=26) {
//这里用的是短路与,要先判断是否越界,否则会抛出下标越界异常
str+=change(arr[i]*10+arr[i+1]);
i=i+2;
}else {
str+=change(arr[i]);
i++;
}
}
}
}
//将int转化为对应的字母
public static char change(int a) {
char c=(char) (a+64);
return c;
}
}
评论区欢迎指正