#include<iostream>
using namespace std;
void fun(char str1[],char str2[])
{
int long_length=strlen(str1);
int short_length=strlen(str2);
int flag=0;
int cnt=0;
int max=0;
int biaoji_j=0;
int biaoji_i=0;
int i;
int j ;
if (long_length<short_length)
{
flag=1;
swap(long_length,short_length);
}
int **num=(int**)malloc(sizeof(int*)*short_length);
for (int k=0;k<short_length;k++)
{
num[k]=(int *)malloc(sizeof(int )*long_length);
memset(num[k],0,sizeof(int )*long_length);
}
for ( i=0;i<short_length;i++)
{
for ( j=0;j<long_length;j++)
{
if (str2[i]==str1[j])
{
num[i][j]=1;
}
else
{
num[i][j]=0;
}
}
}
for (i=0;i<short_length;i++)
{
for (int j=0;j<long_length;j++)
{
cout<<num[i][j]<<" ";
}
cout<<endl;
}
for (i=1;i<short_length;i++)
{
for ( j=1;j<long_length;j++)
{
if (num[i-1][j-1]!=0 && num[i][j]==1)
{
num[i][j]+=num[i-1][j-1];
}
}
}
cout<<endl;
for (i=0;i<short_length;i++)
{
for ( j=0;j<long_length;j++)
{
cout<<num[i][j]<<" ";
if (num[i][j]>max)
{
max=num[i][j];
biaoji_j=j;
biaoji_i=i;
}
}
cout<<endl;
}
biaoji_j=biaoji_j-max+1;
biaoji_i=biaoji_i-max+1;
cout<<"相同字符为:\n";
for (i=biaoji_i;max>0;i++,max--)
{
cout<<str2[i];
}
cout<<endl;
}
int main()
{
fun("yiewcdeacd","abcdef");
return 0;
}
找出两个字符串中最长的公共字符串:如“abcdef” 和“yiewcdeacd”,则输出“cde”
最新推荐文章于 2017-06-29 15:35:47 发布