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

解题思路
- 遍历最近的两个字符串,判断其ascll是否满足条件。
ASCll码表

【代码】
public class topic08 {
static String set = "123242526"; // 题目输入案例
static StringBuilder res = new StringBuilder(); // 存放结果
public static void main(String[] args) {
char[] arrChar = set.toCharArray();
for (int i = 0; i < arrChar.length; i++) {
int ascll = Integer.parseInt(String.valueOf(arrChar[i]) + arrChar[1 + i]) + 64;
if (i < arrChar.length - 1) {
// 判断组合数字是否超过大写字母ascll
if (ascll <= 90) {
char letter = (char) ascll;//int转char字符
res.append(letter);
i++; // 组合数字满足,i向后移动一个
} else {
// 超过则不使用组合数字,用原单数 + 16 = ascll 大写字母
char letter = (char) (arrChar[i] + 16);
res.append(letter);
}
} else { // 处理列表的最后一个字符
char letter = (char) (arrChar[i] + 16);
res.append(letter);
}
}
System.out.println(res);
}
}
结果
LCXYZ

浙公网安备 33010602011771号