现在的位置: 首页 > 综合 > 正文

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

2017年10月27日 ⁄ 综合 ⁄ 共 556字 ⁄ 字号 评论关闭
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;
}

抱歉!评论已关闭.