题解
相邻字母
1 条题解
-
0
解题思路
输入一个字母(范围是 B-Y 或 b-y),输出它前面一个字母、它自己、它后面一个字母,中间用空格隔开。例如输入 B,输出
A B C。关键还是 ASCII 表:字母按顺序排列,编号连续。
A是 65,B是 66,C是 67…… 所以:- 前一个字母 =
c - 1:把编号减 1; - 后一个字母 =
c + 1:把编号加 1。
比如输入 B(编号 66):前一个是 65 →
A,后一个是 67 →C,所以输出A B C。题目为什么限定范围是 B-Y 或 b-y?因为如果是 A 或 Z,往前或往后会超出字母表(A 前面没有字母)。题目限定范围后,就保证了
c-1和c+1一定还在字母表里,我们就不需要额外写判断边界的代码。输出时注意两点:一是三个字母之间用空格隔开,二是要把字符转换写清楚。
char(c - 1)表示把编号 c-1 转回字符类型;如果漏了char(),输出的就是编号数字而不是字母。参考代码
#include <iostream> using namespace std; int main() { char c; // c:输入的那个字母 cin >> c; // 读入一个字母 // 前一个字母:编号减1后转回字符 cout << char(c - 1) << " "; // 中间字母:就是原来的字母 cout << c << " "; // 后一个字母:编号加1后转回字符 cout << char(c + 1) << endl; return 0; }复杂度分析
程序只做两次加减和三次输出,运算次数固定,和输入的是哪个字母无关。所以时间复杂度是 O(1),空间复杂度也是 O(1)(只用了 1 个 char 变量)。
这类字母题的本质都是 ASCII 编号的加减,遇到“相邻字母”“大小写转换”都能用同一套思路解决。
- 前一个字母 =
- 1