求两个字符串的最大公共子串.

该博客探讨如何找到两个字符串的最大公共子串。以较短字符串为起点,生成所有子串,并检查它们是否为较长字符串的子串,遵循由长到短的顺序以确保找到最长的公共子串。例子中,字符串A='abcdefg',字符串B='cdeab',通过此方法可找到最大公共子串。
摘要由CSDN通过智能技术生成

 

题目:求两个字符串的最大公共子串.例如字符串A="abcdefg",字符串B="cdeab";

分析:从两个字符串的那个较短的字符串出发,求其全部子串,判断每一个子串是不是那个长串的子串,求子串过程本着由长到段的原则,这样可以保证第一次匹配到的子串就是最大的公共子串。

char* get_common_string(char* str1, char* str2)
{
	assert(str1);
	assert(str2);

	int len1 = strlen(str1);
	int len2 = strlen(str2);

	//保证short_str指向端字符串,long_str指向长的字符串
	char* short_str=str1;
	char* long_str=str2;
	if (len1 > len2)
	{
		short_str = str2;
		long_str = str1;
	}

	//如果短串是长传的子串,那么最大公共串就是短串
	if (strstr(long_str, short_str) != NULL)
	{
		return short_str;
	}
	
	len2 = strlen(short_str);//现在len2代表短串的长度
	//sub_str是用来存储短串的各个子串的临时空间的
	char* sub_str = (char*)malloc(sizeof(char)*len2);

	//i是短串的所有可能长度,由于上面已经判断过短串自身了
	//因此这里最长比短串小1开始
	for (int i = len2 - 1; i > 0; i--)
	{
		//在短串中,从0下标开始找长度为i的子串,j的上限就是
		//子串起始位置的下标,由于从j开始加上子串长
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值