最大公共子串

目前只会暴力求解
思路:
两层大循环。字符串1向后遍历,每次拿一个字符出来。字符串2从前往后找看哪个字符能和字符串1拿出来的字符匹配。匹配上第一个字符了就写一个小循环往后看一共能匹配多少个字符,记录下第一个匹配上字符的位置和长度,如果打破了最大字符串长度的记录就替换记录。


#include <stdio.h>
#include <string.h>
void sub(char* s1, char* s2);
int main()
{
	char s1[100], s2[100];
	scanf("%s", s1);
	scanf("%s", s2);
	sub(s1, s2);
	return 0;
}

void sub(char* s1, char* s2)
{
	int maxPos = 0,maxLen=0,pos=0,len=0;
	for (int i = 0; i < strlen(s1); i++)
	{
		for (int j = 0; j < strlen(s2); j++)
		{
			len = 0;
			pos = 0;
			if (*(s1 + i) == *(s2 + j))
			{
				pos = i;
				len=1;
			}
			while (*(s1 + i + len) == *(s2 + j + len) && *(s1 + i + len) != '\0'&&*(s2 + j + len) != '\0')
			{
				len++;
			}
			if (len > maxLen)
			{
				maxLen = len;
				maxPos = pos;
			}
		}

	}
	while (maxLen > 0)
	{
		printf("%c", *(s1 + maxPos));
		s1++;
		maxLen--;
	}
}

版权声明:本文为alike_meng原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。