例如:
abcdabcaabcd
最长子序列为:abcd。
下面我们介绍两种方法:
第一种方法:
倍增算法。也就是在序列中先以步长为1查看两个相邻的元素是否相等,都不相等,将步长加1,查看两个相邻为2的元素是否相等,不相等,步长再增加1,依次进行,直到步长为k时,两个元素相等,之后以这两个元素为起始端我们同时向后移动,遇到相同元素则在相同子序列上+1.之后和最长子序列长度比较大小,判断是否要将最长子序列长度重新赋值。代码如下:
char* longestsubstr(char *str)
{
if(str==NULL) return NULL;
int max=0;
int start=0;
for(int i=1;i<strlen(str);i++)
{
for(int k=0,j=0;j<strlen(str)-i;j++)
{
if(str[i+j]==str[j]) k++;
else
{
k=0;
}
if(k>max)
{
max=k;