您的位置:首页 > 其它

利用后缀数组找字符串中相同且长度最长的字符串

2014-08-22 20:24 323 查看
int con_sub(char *str,char *ret)
{
int max_len=0;//记录最大长度
int temp_len=1;
int len=strlen(str);
char** next=(char**)malloc(sizeof(char *)*len);
for (int i=0;i<len;i++)//后缀数组
{
next[i]=str+i;
}
for (int k=1;k<(len+1)/2;k++)//相等大小不会大于一半,相等大小的控制
{
for (int i=0;i<len-1;i++)//从头开始比较,控制第i个子串与后面的比较
{
temp_len=1;
for (int j=0;i+k+j<=len-1;j++)//用于比较不相邻的字串是否相等,控制后面被比较的子串
{
if (strncmp(next[i],next[i+k+j],k)==0)//跨度为k进行比较前k个字符,找到一个相等的,立即进入下一个k值比较,如果不等next[i+k+j]往下移动一位,由j控制
{
temp_len=k;
break;
}
}
if (temp_len>max_len)
{
max_len=temp_len;
strncpy(ret,str+i,max_len);//把最大的重复字符串保存起来
break;
}
}
}
return max_len;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐