1. 程式人生 > >如何求兩字串的最長公共子串

如何求兩字串的最長公共子串

此演算法的時間複雜度我還沒想清楚,

程式碼如下:

#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