Chinaunix首页 | 论坛 | 博客
  • 博客访问: 481998
  • 博文数量: 148
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1553
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-23 23:09
文章分类

全部博文(148)

文章存档

2010年(6)

2009年(58)

2008年(84)

我的朋友

分类:

2009-09-16 13:45:35

写一个函数,找出一个字符串中最长的重复子串。“t1t1”结果就是t1."cabcabca"结果就是cab或者abc或者bca。

#include

#define BUF_MAX 1000

int index; //子串起始位置
int len;//子串长度

void str_search(const char *str)
{
 int i=0;
 while(str[i]!='\0') ++i;

 int strlen=i;

 for(i=strlen/2;i>0;--i)
 {
  int zeronum=0;
  for(int j=i;j  {
   if (str[j]==str[j-i])
   {
    ++zeronum;
    if (zeronum==i)
    {
     index=j-2*i+1;
     len=i;
     return;
    }
   }
   else
   {
    zeronum=0;
   }
  }
 }
}


int main()
{
 char str[BUF_MAX];

 scanf("%s",str);

 str_search(str);

 printf("%d:%d\n",index,len);

说明:

假设str中有长度为m的连续子串,
则字符串移动m个位置后,与原串
 s0 s1 s2 s3 ... sm-1 sm sm+1 sm+2 ..... sn
                            s0   s1  s2 .............sn

一定有连续m个位置的字符是相等的;

如果有多个解,只返回第一个;

http://blog.csdn.net/tailzhou/archive/2006/07/21/953919.aspx
阅读(8091) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~