A Za, A Za, Fighting...

坚信:勤能补拙

2011字符串-最长重复子串,后缀数组

from: Programming Pearl

/* Copyright (C) 1999 Lucent Technologies */
/* From 'Programming Pearls' by Jon Bentley */

/* longdup.c -- Print longest string duplicated M times */

#include 
<stdlib.h>
#include 
<string.h>
#include 
<stdio.h>

int pstrcmp(char **p, char **q)
{   
return strcmp(*p, *q); }

int comlen(char *p, char *q)
{    
int i = 0;
    
while (*&& (*p++ == *q++))
        i
++;
    
return i;
}

#define M 1
#define MAXN 5000000
char c[MAXN], *a[MAXN];

int main()
{   
int i, ch, n = 0, maxi, maxlen = -1;
    
while ((ch = getchar()) != EOF) {
        a[n] 
= &c[n];
        c[n
++= ch;
    }
    c[n] 
= 0;
    qsort(a, n, 
sizeof(char *), pstrcmp);
    
for (i = 0; i < n-M; i++)
        
if (comlen(a[i], a[i+M]) > maxlen) {
            maxlen 
= comlen(a[i], a[i+M]);
            maxi 
= i;
        }
    printf(
"%.*s\n", maxlen, a[maxi]);
    
return 0;
}

posted on 2011-08-19 15:11 simplyzhao 阅读(557) 评论(1)  编辑 收藏 引用 所属分类: R_找工复习2011

评论

# re: 2011字符串-最长重复子串,后缀数组[未登录] 2012-07-08 00:33 123

5123  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜