如何求兩字串的最長公共子串
此演算法的時間複雜度我還沒想清楚,
程式碼如下:
#include<stdio.h>
#include<string.h>
char * maxsamesubstring(char *s1,char *s2)
{
int i,j,len,maxlen,index,maxindex;
maxlen=0; //初始化最長公共子串的長度
maxindex=0; //初始化最長公共子串的位置
len=0; //當前公共子串的長度
for(i=0;s1[i]!='/0';i++)
for(j=0;s2[j]!='/0';j++)
if(s1[i+len]==s2[j])
{
if(!len)
{
index=j; //記下公共子串的起始位置
}
len++;
}
else if(len)
{
if(maxlen<len) //經過一次掃描找到了最長公共子串
{
maxlen=len;
maxindex=index;
}
len=0; //進行下一次的掃描
j=index; //下一次的掃描應從index的後一個字元開始
}
char *p=new char[maxlen+1];
strncpy(p,s2+maxindex,maxlen); //把最長公共字串複製到p所指的空間
p[maxlen]='/0'; //置串結束標誌
return p;
}
int main()
{
char *s1="president hujintao",*s2="hujin hujintao",*sub;
sub=maxsamesubstring(s1,s2);
printf("%s/n",sub);
delete[] sub;
return 0;
}
2010-10-14