/**
判断Xm是否是Yn的子序列
查找过程如下图所示:
a[]: B C D F i下标 n
|\ |\ |
b[]: A B D C A D F E j下标 m
*/
#include <iostream>
/**
解一:时间复杂度为O(n^2)
设|a[n]|≤|b[m]|
*/
template <class T>
bool IsSubSequence(T a[], int n, T b[], int m) {
int t;
t = 0;
for (int i=0; i<n; i++) {
for (int j=t;; j++) {
if (a[i]==b[j]) {
/**
找到,记住j位置,下一次从j+1开始.
*/
t=j+1;
break;
}
if (j>=m)
/**
没有找到,所以不是子序列。
*/
return false;
}
}
return true;
/**
全部比较完,都已经找到。
*/
}
/** 解二:时间复杂度为O(n) */
template <class T>
bool _IsSubSequence(T a[], int n, T b[], int m)
{
int i=0;
int j=0;
while
判断一个序列是否为另一个序列的子序列(两种算法)
最新推荐文章于 2024-07-03 16:12:46 发布
这篇博客介绍了如何判断一个序列是否为另一个序列的子序列,提供了两种算法:一种时间复杂度为O(n^2),另一种为O(n)。通过遍历和比较两个序列的元素,实现子序列的判断。在C++中用模板函数实现,并在main函数中给出示例测试。
摘要由CSDN通过智能技术生成