如何求两字串的最长公共子串

来源:互联网 发布:天下事有难易乎翻译 编辑:程序博客网 时间:2024/05/21 10:26

此算法的时间复杂度我还没想清楚,

代码如下:

 

#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