统计串中最长的重复子串

作者在 2015-08-04 23:10:47 发布以下内容

一串字符串中可能会出现重复子串的情况,找出最长的重复的子串。

#include <stdio.h>
#include <stdlib.h>
#define maximum 30
void StrInitialization(char *h)
{
    gets(h);
}
int StringLength(char *h)
{
    int count=0;
    while(h[count]>0)
        count++;
    return count;
}
void MaSubStr(char *h,char *t)
{
    int lenmax=0,len,index=0;
    int i=0,j,k;
    while(i<StringLength(h))
    {
        j=1+1;
        while(j<StringLength(h))
        {
            if(h[i]==h[j])
            {
                len=1;
                for(k=0;h[i+k]==h[j+k];k++)
                    len++;
                if(len>lenmax)
                {
                    index=i;
                    lenmax=len;
                }
                j+=len;
            }
            else
                j++;
        }
        i++;
    }
    for(i=0;i<lenmax;i++)
        t[i]=h[index+i];
}
void DisplayString(char *h)
{
    int i;
    for(i=0;i<StringLength(h);i++)
        printf("%c",h[i]);
    printf("\n");
}
int main()
{
    char str[maximum];
    printf("输入串为:");
    StrInitialization(str);
    printf("\n");
    char t[maximum];
    int i;
    MaSubStr(str,t);
    printf("最长重复子串为:");
    DisplayString(str);
    printf("\n");
    return 0;
}

 

数据结构 | 阅读 1145 次
文章评论,共0条
游客请输入验证码