以下是使用 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` 非常长,可能会导致性能问题。 [2025-07-02 20:39:54 | AI写代码神器 | 832点数解答]