1 条题解
-
0
📝 题目大意
给定两个长度为 的字符串 和 ,判断它们是否相似。相似的定义是:对于每个位置 , 和 要么完全相同,要么是
1与l的配对,要么是0与o的配对。💡 解题思路
- 题目分析:,数据范围极小,直接逐位比较即可。字符仅包含小写字母和数字,特殊规则只有两组:
1↔l和0↔o。 - 算法推导:遍历 从 到 ,对每一对 依次检查:
- 若 ,直接跳过(
continue); - 若 ,跳过;
- 若 ,跳过;
- 否则将标记
flag置为false,表示存在不相似的位置。
- 若 ,直接跳过(
- 边界与细节:
- 需要区分字符
'1'(数字)和'l'(小写字母 L),以及'0'(数字零)和'o'(小写字母 O),代码中必须用单引号包裹。 - 配对是双向的,检查时需同时覆盖 和 两种情况,同理 和 。
- 只要有一对字符不满足上述任一条件,整个字符串对就不相似,输出
No。
- 需要区分字符
⏱️ 复杂度分析
- 时间复杂度:,只需一次线性遍历。
- 空间复杂度:,仅使用常数个变量。
💻 标准代码 (C++)
#include <bits/stdc++.h> using namespace std; int main () { int n; bool flag = 1; // 标记是否相似,初始为 true cin >> n; string a, b; cin >> a >> b; for (int i = 0; i < n; i++) { if (a[i] == b[i]) continue; // 完全相同,跳过 else if ((a[i] == '1' && b[i] == 'l') || (a[i] == 'l' && b[i] == '1')) continue; // 1 和 l 配对,跳过 else if ((a[i] == '0' && b[i] == 'o') || (a[i] == 'o' && b[i] == '0')) continue; // 0 和 o 配对,跳过 else flag = 0; // 不满足任何相似条件,标记为 false } if (flag == 0) printf("No"); else printf("Yes"); return 0; } - 题目分析:,数据范围极小,直接逐位比较即可。字符仅包含小写字母和数字,特殊规则只有两组:
- 1
信息
- ID
- 717
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者