判断其中一个序列是否为另一个序列的子序列。(序列顺序一致)
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
bool YesorNo(int A[],int B[],int n1,int n2)
{
int t;
t=0;
int i,j;
for(i=0; i<n1; i++)
{
for(j=t; ; j++)
{
if(A[i]==B[j]) //如果A[i]==B[j],那么数组元素都相应后移。
{
t=j+1;
break;
}
if(j>=n2) //如果出现不相等的元素了,就继续往后找,若是B数组都找完了,还没找到,就不是子序列
{
return false;
}
}
}
return true;
}
bool IsorNo(int A[],int B[],int n1,int n2)
{
int i,j;
i=0;
j=0;
while(i<n1)
{
while(j<n2) //当数组中还存在剩余元素没比对玩,就继续比对。
{
if(A[i]==B[j]) //如果数组元素一致,那么就继续找。
{
i++;
j++;
if(j>n2) //在这里需要检查数组B是否都比对完成,如果全部比对完成,那么就是子序列
{
return true;
}
}
else
{
j++; //如果不一致,那么就查看B[j]位置后面的元素。
if(j>n2)
{
return false;
}
}
}
}
return true;
}
int main()
{
int A[]= {1,2,3};
int B[]= {1,2,3,4};
int n1=sizeof(A)/sizeof(int);
int n2=sizeof(B)/sizeof(int);
if(YesorNo(A,B,n1,n2))
{
cout<<"A是B的子序列"<<endl;
}
else
{
if(YesorNo(B,A,n2,n1))
{
cout<<"B是A的子序列"<<endl;
}
else
{
cout<<"A和B不互为子序列"<<endl;
}
}
if(IsorNo(A,B,n1,n2))
{
cout<<"A是B的子序列"<<endl;
}
else
{
if(IsorNo(B,A,n2,n1))
{
cout<<"B是A的子序列"<<endl;
}
else
{
cout<<"A和B不互为子序列"<<endl;
}
}
return 0;
}
如果序列顺序不一致,就先进行排序,之后再调用函数。