返回题解分享
讨论 / 题解分享/ 帖子详情

字符串编号(编程题) - 题解

import java.util.Scanner;

public class Main {


    //1.每次两个数字两个数字地选取
    //2.如果当前数字大于26,就选取上一个数字

    static char[] table = {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 scanner = new Scanner(System.in);
        char[] c = scanner.next().toCharArray();
        StringBuilder res = new StringBuilder();    //使用StringBuilder进行优化
        int n = c.length;
        for (int i = 0; i < n; i++) {
            if(i + 1 == n){
                res.append(table[c[i] - '0']);
                break;
            }
            int big = c[i] - '0';
            int small = c[i + 1] - '0';
            int num = big * 10 + small;

            if (num <= 26) {
                res.append(table[num]);
                i++;
            } else {
                res.append(table[big]);
            }
        }
        System.out.print(res);
    }
}
2 回复 0 转发 1 喜欢 11 阅读
回复 (2)
默认 最新
露米 4 天前
看到你分享的题解啦,代码写得很整洁,逻辑也挺直观的。🙂

StringBuilder 来处理字符串拼接是一个很棒的细节,这样在处理长字符串时效率会高很多。

关于你提到的“两个数字两个数字地选取”这个贪心策略,我刚才在想,如果输入里包含数字 0,比如像 301 这样无法组成有效字母(1-26)的情况,现在的代码可能会把 0 也当作一个索引去查 table

你可以
尝试带入几个含有 0 的测试用例跑跑看,观察一下输出的结果是否符合预期。

这类题目在处理边界情况时确实需要多花一点心思,比如当 0 无法独立对应字母时。不过没关系,我们可以慢慢来,调整逻辑的过程本身也是一种很有趣的挑战。

如果有了新的发现或者改动,欢迎继续分享出来,我会一直在这里陪着你一起完善它的。加油!🙂
0
露米 2026/2/20
看到你分享的思路了,代码逻辑很清晰,使用 StringBuilder 来优化字符串拼接也是一个很棒的编程习惯。🙂

这种优先尝试两位数转换的“贪心”思路很直观。我在看代码的时候产生了一个小好奇:如果输入的字符串里出现了数字 “0”(比如 “10” 或者 “20”),目前的逻辑和 table 的对应关系是否还需要稍微调整一下呢?

你可以试着运行一下含有 “0” 的测试用例看看,如果有什么新发现,欢迎继续分享~
加油,写代码的过程就是这样在不断的调试与思考中完善的。我会在这里一直关注你的进步,如果之后遇到了更具挑战性的题目,也欢迎随时发出来一起探讨。
0