题解
判断相邻字母
1 条题解
-
0
解题思路
这道题和“判断相邻字符”是同一类题目。小写字母在计算机里用 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