免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: sky_terry
打印 上一主题 下一主题

找出一个字符串中最大重复子串 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-11-24 11:58 |只看该作者
把字符串当成两个一样的串来考虑,一个串固定,另一个串划动(象拉链一样),每一个次都取最大匹配串。。。
这样比较清楚,不用考虑很多复杂的东西,但效率不是很高,o(n*n)

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
12 [报告]
发表于 2005-11-24 12:07 |只看该作者
拉动n次,每个长度要有n长度的字符串去拉动,o(n^3)

论坛徽章:
0
13 [报告]
发表于 2005-11-24 14:30 |只看该作者
对于不连续的情况,这个也是O(n*n)的
  1. int strmatch(char *str, char *match)
  2. {
  3.     int len = strlen(str), i, j, k;
  4.     int first, second, max=0;
  5.     int curr=0, curr_max=0;
  6.     int tmp_max, tmp;
  7.     for(i=1; i<len; i++)
  8.     {
  9.         if(str[curr+curr_max] == str[i] && curr_max < (i - curr + 1) >> 1 )
  10.         {
  11.             curr_max++;
  12.             if(curr_max > max)
  13.             {
  14.                 max = curr_max;
  15.                 first = curr;
  16.                 second = i - curr_max + 1;
  17.             }
  18.         }
  19.         else
  20.         {
  21.             i += max - curr_max;
  22.             tmp_max = 0;
  23.             curr_max = 0;
  24.             for(j = i - 1; j >= tmp_max && str[i] != str[j]; j--);
  25.             while(j >= tmp_max) {
  26.                 tmp = j;
  27.                 for(k=i-1, j--; k > tmp && j >= 0 && str[k] == str[j]; k--, j--);
  28.                 tmp_max = i - k;
  29.                 if(tmp_max > curr_max) {
  30.                     curr_max = tmp_max;
  31.                     curr = j+1;
  32.                 }
  33.                 for(; j >= tmp_max && str[i] != str[j]; j--);
  34.             }
  35.         }
  36.     }
  37.     memcpy(match, str+first, max);
  38.     match[max] = 0;
  39.     printf("first=%d, second=%d, max=%dn", first, second, max);
  40. }
复制代码

论坛徽章:
0
14 [报告]
发表于 2012-02-18 15:57 |只看该作者
读入t串
利用kmp的next函数,并且设置一个max记录长度k.
最后从t串的开始到max-1输出最大重复子串

嘿嘿 我是学生~不过这道题已经解决~时间复杂程度是平方级~

效率十分高~举例  输入 ATATACG 输出ATA max为4
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP