C++ 实现:判断序列 a 是否为序列 b 的子序列(附代码及详细解释)
以下是使用 C++ 实现判断序列 `a` 是否为序列 `b` 的子序列的代码: ```cpp #include <iostream> #include <vector> // 判断 a 序列是否为 b 序列的子序列 bool isSubsequence(const std::vector<int>& a, const std::vector<int>& b) { int i = 0; // 用于遍历序列 a 的指针 int j = 0; // 用于遍历序列 b 的指针 // 遍历序列 b while (i < a.size() && j < b.size()) { // 如果当前 a 序列的元素和 b 序列的元素相等 if (a[i] == b[j]) { i++; // 移动 a 序列的指针 } j++; // 无论是否相等,都移动 b 序列的指针 } // 如果 a 序列的指针已经遍历完整个 a 序列,说明 a 是 b 的子序列 return i == a.size(); } int main() { int n, m; std::cout << "请输入序列 a 的长度: "; std::cin >> n; std::vector<int> a(n); std::cout << "请输入序列 a 的元素: "; for (int i = 0; i < n; i++) { std::cin >> a[i]; } std::cout << "请输入序列 b 的长度: "; std::cin >> m; std::vector<int> b(m); std::cout << "请输入序列 b 的元素: "; for (int i = 0; i < m; i++) { std::cin >> b[i]; } if (isSubsequence(a, b)) { std::cout << "序列 a 是序列 b 的子序列。" << std::endl; } else { std::cout << "序列 a 不是序列 b 的子序列。" << std::endl; } return 0; } ``` 代码解释: 1. `isSubsequence` 函数: - 该函数接受两个 `std::vector<int>` 类型的参数 `a` 和 `b`,分别表示序列 `a` 和序列 `b`。 - 使用两个指针 `i` 和 `j` 分别遍历序列 `a` 和序列 `b`。 - 当 `a[i]` 和 `b[j]` 相等时,移动 `i` 指针;无论是否相等,都移动 `j` 指针。 - 如果 `i` 指针等于 `a` 序列的长度,说明 `a` 是 `b` 的子序列,返回 `true`;否则返回 `false`。 2. `main` 函数: - 首先,从用户输入中获取序列 `a` 和序列 `b` 的长度。 - 然后,分别获取序列 `a` 和序列 `b` 的元素。 - 调用 `isSubsequence` 函数判断 `a` 是否为 `b` 的子序列,并输出结果。 额外需要注意的逻辑点: 1. 输入的序列长度 `n` 和 `m` 应该是非负整数,否则可能会导致数组越界错误。 2. 在判断子序列时,要注意元素的顺序,子序列的元素顺序必须与原序列中的顺序一致。 3. 该算法的时间复杂度为 $O(m)$,其中 $m$ 是序列 `b` 的长度。如果序列 `b` 非常长,可能会导致性能问题。 ######[AI写代码神器 | 832点数解答 | 2025-07-02 20:39:54]
- 求解特定条件下整数序列的最小值:算法分析与代码实现(字节豆包 | 746点数解答 | 2026-01-24 13:14:40)64
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)362
- 缜密逻辑,全新无名杀“风餐”技能代码精心打造与深度解析 (字节豆包 | 469点数解答 | 2025-04-05 11:37:06)257
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)282
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)278
- 求解 1 至 n 内第 k 大孤独数:质数与余数的巧妙探寻(字节豆包 | 298点数解答 | 2025-11-10 20:01:57)178
- 巧判小朋友同桌意愿:满足需求还是无解难题?(字节豆包 | 599点数解答 | 2025-11-16 20:06:12)81
- 巧用代码判断:能否让 2n 个小朋友都拥有满意同桌?(字节豆包 | 445点数解答 | 2025-11-16 20:07:02)88
- JS 代码:判断“red”改值为“green”并弹窗显示结果( | 176点数解答 | 2024-05-20 21:33:04)426
- 用 JS 代码巧妙判断 a 与 b 关系:输出对应结果 ( | 47点数解答 | 2024-05-20 22:10:14)334
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)333
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)487