更多关于最长子串:http://blog.youkuaiyun.com/szu030606/article/details/8088596
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int mycmp( const void * a, const void * b )
{
return strcmp( *( char ** )a, *( char ** )b );
}
int cmp( char * str1, char * str2 )
{
int len = 0;
while( *str1++ == *str2++ )
{
++len;
}
return len;
}
void sub_str( char ** a, int n )
{
int max = 0;
int len = 0;
int index =0;
int i;
char * tmp;
for( i = 0; i < n-1; ++i )
{
len = cmp( a[i],a[i+1] );
if( len > max )
{
max = len;
index=i;
}
}
cout<<"index: "<<( n - strlen( a[index] ) ) + 1<<endl;
//输出公共前驱
tmp = a[index];
while( max-- )
{
cout<<*tmp++;
}
}
int main()
{
char str[] ="yyabcdabjcabceg";
char * a[100];
unsigned int s_len = strlen( str );
char * tmp = str;
/*记录子串首地址,子串之间只差一个字符*/
for( int i = 0; i < s_len; ++i, ++tmp )
{
a[i] = tmp;
}
/*子串排序*/
qsort( a, s_len, sizeof(char *), mycmp );
/*求出相邻子串的公共前驱*/
sub_str( a, s_len );
system("pause");
return 0;
}