#include<iostream>
using namespace std;
int MaxSub(char a[],char b[],char c[]);
void Sub(int m,int n,char a[],char b[]);
void MyCopy(char a[],char b[]);
int SubStr(char a[],char b[]);
int main()
{
char a[100],b[100],c[100];
int i=0;
cout<<"请输入数组一的元素:";
char ch=getchar();
while(ch!='\n')
{
a[i]=ch;
i++;
ch=getchar();
}
a[i]=0;
i=0;
cout<<"请输入数组二的元素:";
ch=getchar();
while(ch!='\n')
{
b[i]=ch;
i++;
ch=getchar();
}
b[i]=0;
if(MaxSub(a,b,c))
cout<<"最大子串为:"<<c<<endl;
else
cout<<"没有子串!"<<endl;
return 0;
}
void MyCopy(char a[],char b[])
{
int i=0;
while(a[i])
{
b[i]=a[i];
i++;
}
b[i]=0;
}
int MaxSub(char a[],char b[],char c[])
{
int i=0,j=0,asum=0,bsum=0;
char d[100];
while(a[i])
i++;
asum=i;
i=0;
while(b[i])
i++;
bsum=i;
if(asum>bsum)
{
for(i=1;i<=bsum;i++)
{
for(j=0;j<i;j++)
{
Sub(0+j,0+j+bsum-i,b,d);
if(SubStr(a,d)>=1)
{
MyCopy(d,c);
return 1;
}
}
}
}
else
{
for(i=1;i<=asum;i++)
{
for(j=0;j<i;j++)
{
Sub(0+j,0+j+asum-i,a,d);
if(SubStr(b,d)>=1)
{
MyCopy(d,c);
return 1;
}
}
}
}
return 0;
}
int SubStr(char a[],char b[])
{
int i=0,j=0,num=0;
while(a[i])
{
if(a[i]==b[j])
{
i++;
j++;
if(!b[j])
{
j=0;
num++;
}
}
else
{
i=i-j+1;
j=0;
}
}
return num;
}
void Sub(int m,int n,char a[],char b[])
{
int i,j=0;
for(i=m;i<=n;i++)
{
b[j]=a[i];
j++;
}
b[j]=0;
}
求最大子串
最新推荐文章于 2023-07-12 14:12:56 发布