最长相同子串问题(一)

输入两个长度不超过15的字符串,输出这两个字符串的最长相同子串,若有多个,则输出在第一个字符串中位置相对靠前的子串。

测试样例:

a
a
a
b
abc
cde
abcdabcdef
bcdefabcd
abcdefgh
atbcdtdefg
abcdefgh
bcde
aaaaaaaaaa
aaaaaaaaab

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
	char s1[20], s2[20];
	while (cin >> s1 >> s2)
	{
		for (int length_substr = strlen(s1); length_substr > 0; length_substr--)//字串长度递减
		{
			char c1[20];
			strncpy_s(c1, s1, strlen(s1));
			c1[length_substr] = '\0';
			for (char *p1 = s1; *(p1 + length_substr - 1) != '\0'; p1++)//子串位置后移
			{
				char pp1[20];
				strncpy_s(pp1, p1, length_substr);
				*(pp1 + length_substr) = '\0';
				char c2[20];
				strncpy_s(c2, s2, strlen(s2));
				c2[strlen(c2)] = '\0';
				for (char *p2 = c2; *p2 != '\0'; p2++)//子串位置比对
				{
					char pp2[20];
					strncpy_s(pp2, p2, length_substr);
					*(pp2 + length_substr) = '\0';
					if (strncmp(pp1, pp2, length_substr) == 0)
					{
						cout << pp1;
						goto E;
					}
				}
			}
		}
	E: cout << endl;
	}
	return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值