top1编程
← 返回题目
题解

判断相邻字符

1 条题解

  • 0
    @ 2026-8-4 10:00:35

    解题思路

    输入两个不同的小写字母,判断它们在字母表里是不是挨在一起的。比如 e 和 f 相邻,e 和 g 不相邻。

    怎么判断"相邻"?字母在计算机里其实是用数字存储的:a 是 97,b 是 98,c 是 99……依次加 1。所以两个字母在字母表里的距离,就等于它们对应的数字之差。

    比如 e 对应 101,f 对应 102,e 和 f 相差 1,所以相邻。e 和 g 相差 2,不相邻。

    做法:

    1. 读入两个字符 a 和 b;
    2. 算出两个字母相差多少:因为不知道谁大谁小,用 if 判断一下,用较大的减去较小的,得到差 diff;
    3. 如果 diff 等于 1,说明相邻,输出 YES;否则输出 NO。

    注意:题目要求用 if 语句实现,所以我们不用现成的求绝对值函数,自己用 if 就能算出相差多少。这也是对 if 语句的一种训练:先判断大小,再决定谁减谁。

    想一个边界:两个字母顺序反过来,比如输入 f 和 e,同样相差 1,也要输出 YES。我们先用 if 判断谁大、用大的减小的,所以输入顺序没有影响,程序都一样判断正确。

    再验证:输入 a 和 c,c - a = 2,不是 1,中间隔了一个 b,所以不相邻,输出 NO。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        char a, b;   // 两个小写字母
        cin >> a >> b;
    
        // 计算两个字母相差多少:用大的减去小的
        int diff;
        if (a > b) {
            diff = a - b;   // a 比 b 大,用 a 减 b
        } else {
            diff = b - a;   // b 比 a 大,用 b 减 a
        }
    
        if (diff == 1) {   // 相差 1,说明是相邻字母
            cout << "YES" << endl;
        } else {           // 相差不止 1,不相邻
            cout << "NO" << endl;
        }
        return 0;
    }
    

    复杂度分析

    只读入 2 个字符,做一次减法和两次比较,运算次数固定。时间复杂度和空间复杂度都是 O(1)。

    • 1