(C语言)最长公共子串

【问题描述】
编写一个程序,对输入的字符串s和t,求其最长的公共子字符串。
【输入形式】
从屏幕分行读入串s和t。s和t由任意字符构成,长度都不超50个字符。输入数据确保只有唯一的最长公共子串。如果没有公共子串,打印No Answer

【输出形式】
在单独行上输出串s和串t的最长公共子串,在结尾输出一个回车符。

算法提示:用一个int型的计数器记录当前匹配长度,用一个字符数组记录当前匹配子串,如果存在更长子串,则进行相应替换。
【样例说明】
假设从屏幕输入以下内容:
aabcdababce
12abcabcdace
则输出内容为:
abcda

#include<stdio.h>
int main()
{
	char char1[50], char2[50], a[50], b[50];//a[]代表公共字符串,b[]代表最长公共字符串
	int i, j, s = 0, k = 0;
	gets(char1);
	gets(char2);
	for (i = 0; i < 50; i++)
	{	
		if (char1[i] != 0)
		{	
			for (j = 0; j < 50; j++)
			{	
				if (char2[j] == 0)
					break;
				else{
					if (char1[i] == char2[j])
					{
						while (char1[i] == char2[j])
						{
							a[k] = char1[i], k++;//输出当前的公共字符串
							i++, j++;
						}
						if (k > s)//判断是否是最长公共字符串
						{
							int t;
							for (t = 0; t < k; t++)
							{
								b[t] = a[t];
								s = k;
							}
						}
						k=0;
					}
				}
			}
		}
	}
	if(s==0)
		printf("No Answer");
	else
		for (i = 0; i < s; i++)
			printf("%c", b[i]);
	return 0;
}
  • 31
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值