top1编程
← 返回题目
题解

判断相邻字母

1 条题解

  • 0
    @ 2026-8-4 10:39:06

    解题思路

    这道题和“判断相邻字符”是同一类题目。小写字母在计算机里用 ASCII 码表示,相邻的两个字母(比如 'e' 和 'f')的 ASCII 码正好相差 1,所以判断两个字母是否相邻,就是判断它们的 ASCII 码之差是否等于 1。

    因为输入的两个字母顺序不固定(可能是 "e f",也可能是 "f e"),直接相减可能得到负数,比如 'f' - 'e' = 1,但 'e' - 'f' = -1。为了统一比较,我们先比较两个字符的大小,用较大的编码减去较小的编码,得到非负的差值,再判断这个差值是否等于 1。

    题目要求使用 if 语句实现,所以要写两次 if:

    • 第一次 if 求差值:如果第一个字符比第二个大,差值 = 第一个 - 第二个;否则差值 = 第二个 - 第一个;
    • 第二次 if 判断差值是否为 1:是就输出 YES,否则输出 NO。

    char 类型参与加减运算时,会自动使用它的 ASCII 码值,所以代码里直接写 a - b 就是在计算编码的差,不需要额外转换。

    参考代码

    #include using namespace std;

    int main() { char a, b; // a、b 表示输入的两个小写字母 cin >> a >> b; // 读入两个字母

    int diff;        // diff 存放两个字母 ASCII 码的差值(保证非负)
    if (a > b) {     // 如果 a 的编码更大
        diff = a - b;    // 用大的减小的
    } else {
        diff = b - a;    // 否则用 b 减 a
    }
    
    if (diff == 1) {       // 差值等于 1,就是相邻字母
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }
    return 0;
    

    }

    复杂度分析

    程序只读入两个字符,做两次比较和一次减法,运算次数固定,时间复杂度是 O(1)。只用了两个 char 变量和一个 int 变量,空间复杂度也是 O(1)。

    • 1