1387 最长重复子串

原创 2012年03月26日 09:28:11
描述

对于一个字符串S1,其中S2是他的一个子串(长度严格小于S1长度),如果S2在S1中出现次数超过1次,那么S2就是一个重复子串,现在的要求是给定S1,请求出他的最长重复子串;

如果有多个长度一样的最长子串,请输入字典序最小那个串;

比如bbbaaaccc

那么最长子串就是aa

输入

第一行包含一个整数T,表示有T组数据

对于每组数据包含一行,该行有一个字符串,长度小于10,000

输出

对于每组数据请输出他的最长重复子串,保证每组数据都有;

样例输入
2
abacabac
abacabbac
样例输出
abac

bac



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

#define MAXCHAR 10010 

char c[MAXCHAR], *a[MAXCHAR];

int comlen( char *p, char *q )
{
	int i = 0;

	while( *p && (*p++ == *q++) )
	{
		++i;
	}
	return i;
}

int pstrcmp( const void *p1, const void *p2 )
{
	return strcmp( *(char* const *)p1, *(char* const*)p2 );
}

int main( )
{
	char ch;
	int n=0;
	int i, temp;
	int maxlen=0, maxi=0;
	int number,t;

	scanf("%d",&number);
	
	getchar();
	
	for(t=1;t<=number;t++)
	{
		n=0;
		maxlen=0;
		maxi=0;
		while( (ch=getchar())!='\n' )
		{
			a[n]=&c[n];
			c[n++]=ch;
		}
		c[n]='\0';
		
		qsort( a, n, sizeof(char*), pstrcmp );

		for(i=0; i<n-1; ++i )
		{
			temp=comlen( a[i], a[i+1] );
			if( temp>maxlen )
			{
				maxlen=temp;
				maxi=i;
			}
		}
		printf("%.*s\n",maxlen, a[maxi]);
	}

	//system("PAUSE");

	return 0;
}


相关文章推荐

寻找最长不重复子串

  • 2017年06月23日 18:21
  • 851B
  • 下载

找出所有最长连续重复子串及其个数

问题描述: 找出字符串中所以最长连续重复子串及其个数 比如: 输入:123234,最大连续重复字符串为23,个数为2 输入:5555,最大连续重复字符串为555,个数为2 输入:aaabbb...

python实现给定一个字符串,寻找最长非重复子串

问题: 给定一个字符串,寻找其中最长的重复子序列,如果字符串是单个字符组成的话如“aaaaaaaaaaaaa”那么满足要求的输出就是a 思路: 这里的思路有两种是我能想到的 (1)从头开始遍历字符串,...

面试题35:寻找一个字符串中最长的重复子串

思路: 1. 用字符串指针数组保存用户输入的字符串的所有后缀字符串; 2. 将后缀字符串集合进行排序; 3. 比较相邻字符串的公共子串长度,找到长度最大值,保存相应字符串即为所求 代码如下: #inc...

【Programming Pearls】查找一段文本或单词中的最长重复子串

给定一个文本文件,查找最长的重复子串。  如文本“Ask not what your country can do for you, but what you can do for your cou...

求一个串中出现的第一个最长可重叠重复子串 [后缀数组解法]

http://blog.csdn.net/iamskying/article/details/4759485   题目描述: 求一个串中出现的第一个最长重复子串 采用顺序结...

01_求给定字符串最长重复子串

求给定字符串最长重复子串

后缀求可重叠最长重复子串

假设我们有这样的字符串及数组: String str="banana"; boolean flag[]=new boolean[str.length]; flag为后缀数组,用于标记子串位置 ...

最长不重复子串

题:从一个字符串中找到一个连续子串,该子串中任何两个字符不能相同,求子串的最大长度并输出一条最长不重复子串。 本节从最直接的方法逐步优化,渐进探索了四种实现方式,并最终找到时间复杂度为O(N),辅助...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1387 最长重复子串
举报原因:
原因补充:

(最多只允许输入30个字)