C语言最长公共英文单词gets,【C/C++】最长公共子串

这些题目都是大一刚入学时学习C语言的课后作业,在OJ上看到还保留着,就都整理下发出来吧......(只有题和代码)

【问题描述】

编写一个程序,对输入的字符串s和t,求其最长的公共子字符串。

【输入形式】

从屏幕分行读入串s和t。s和t由任意字符构成,长度都不超50个字符。输入数据确保只有唯一的最长公共子串。如果没有公共子串,打印No Answer

【输出形式】

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

算法提示:用一个int型的计数器记录当前匹配长度,用一个字符数组记录当前匹配子串,如果存在更长子串,则进行相应替换。

【样例说明】

假设从屏幕输入以下内容:

aabcdababce

12abcabcdace

则输出内容为:

abcda

【评分标准】

结果完全正确得20分,每个测试点4分,提交程序文件名为c0505.c。

【代码】

这题其实可以用滑窗(sliding windows)做,但是大一新生想到滑窗...太难了

下面是代码:

#include

#include

int main()

{

int z=0;

char s[50];char t[50];

while(1)

{

s[z]=getchar();

if((int)s[z]==10)

{

s[z]='\0';

break;

}

z++;

}//输入字符串,不过warming是因为可能越界(gets())???

//改了后没毛病了......

int v=0;

while(1)

{

t[v]=getchar();

if((int)t[v]==10)

{

t[v]='\0';

break;

}

v++;

}

int num = 0;int save;

int i,j,index,sb = 0;//定位

int k=0;

save = num;

for (i = 0; i < z; i++)

{

for (j = 0; j < v; j++)

{

if (s[i] == t[j])

{

index = i;

int q = i;

int w = j;

while (s[q] == t[w])

{

q++;

w++;

num++;

k=1;

}

}

if (save < num)

{

sb = index;

save = num;

}

num = 0;

}

}

if (k==0)

{

printf("No Answer");

return 0;

}

for (i = sb; i < sb + save; i++)

printf("%c", s[i]);

return 0;

}

PS:由于当时刚学C语言,很多代码显得很稚嫩...需要的人见谅...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值