找出字符串中出现重复而且长度最长的字符串,并且输出而且输出其长度

时间:2021-06-19 10:48:20

下面是我写的函数,没有考虑运算的时间。

第一个是计算出字符串中出现的子字符串出现的次数,

int Compare(char *s,char *c)
{
	char *p=c;
	int n=0;
	
	int p1=strlen(c);
	int i=p1;
	while(true)
	{
		if (*s==*c)
		{
			s++;
			c++;
			i--;
			if (*c=='\0')
			{
				
				n++;
				c=p;
				
			}
			
		}
		else
		{
			s++;
			if (*s=='\0')
			{
				break;
			}
			c=p;
		}
	}
	
	return n;
}

下面这个是是求最长的重复的子字符串

void MaxsubString(char *src)
{
	char *p;
	p1=src;
	p2=src;
	int t=0;
	char dest[256];
	int temp1=0,temp2=0,temp3=1;//temp1是子字符串出重复次数,temp2子字符串的长度,temp3记录子字符串的长度
	for(int i=strlen(src)-1;i>1;i--)
	{
		for (int j=0;j<strlen(src);j++)
		{
			if (j+i<=strlen(src))
			{
				memset(dest,NULL,sizeof(dest));
				if (j<=i)
				{
					p1=src;
					for (t=j;t>0;p1++,t--);
					temp2=i-j;
					for (int k=0;k<=temp2;k++)
					{
						dest[k]=*p1;
						p1++;
					}
					temp1=Compare(src,dest);
					if(temp1>1)
					{
						if (temp2>=temp3)
						{
							temp3=temp2;
							printf("%s,%d\n",dest,temp3+1);
						}
					}

				}

			}
		}
	}
}