Fork me on GitHub

SCAU 11077 最长公共连续子字符串

 

初级入门DP,感觉有点难招架,已经看了MIT算法导论就关于DP的视频有两遍了,逛逛飞燕社区也找了一下相关的资料,今早愣在机房尽想着写状态转移方程,最后还是只写了那么一条:dp[i, j] = a[i] == b[i] ? dp[i-1][j-1]+1 : 0; 串的长度达到了10^5,目测开到二维应该不行了,后来翻看算法导论的讲解视频,跪了,后面缩减空间的内容都忘了~~

11077 最长公共子字符串

时间限制:1000MS  内存限制:65535K

题型: 编程题   语言: 无限制

Description

求两个输入序列的最长的公共子字符串的长度。子字符串中的所有字符在源字符串中必须相邻。

如字符串:21232523311324和字符串312123223445,他们的最长公共子字符串为21232,长度为5。

输入格式

两行,第一行为第一个字符串X,第二行为第二个字符串Y,字符串不含空格并以回车标示结束。X和Y的串长都不超过100000

输出格式

两行,第一行为最长的公共子字符串的长度,第二行输出一个最长的公共子字符串。

说明:
(1)若最长的公共子字符串有多个,请输出在源字符串X中靠左的那个。
(2)若最长公共子字符串的长度为0,请输出空串(一个回车符)。

如输入:
21232523311324
152341231
由于523和123都是最长的公共子字符串,但123在源串X中更靠左,因此输出:
3
123

输入样例

21232523311324
312123223445

输出样例

5
21232

作者

zhengchan

复制代码
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define MAXN 100010
 4 char a[MAXN], b[MAXN];
 5 int p[MAXN], q[MAXN];
 6 
 7 int main()
 8 {
 9 //    freopen("input.txt", "r", stdin);
10     int i, j, len_a, len_b, sum, x, y;
11     scanf("%s%s", a, b);
12     len_a = strlen(a);
13     len_b = strlen(b);
14     memset(p, 0, sizeof(p));
15     memset(q, 0, sizeof(q));
16     sum = 0;
17     for(i=0; i<len_a; ++i)
18     {
19         memcpy(q, p, sizeof(int)*len_b);
20         memset(p, 0, sizeof(p));
21         for(j=0; j<len_b; ++j)
22         {
23             if(a[i] == b[j])
24             {
25                 if(j == 0) p[j] = 1;
26                 else p[j] = q[j-1]+1;
27                 if(sum < p[j])
28                 {
29                     x = j;
30                     sum = p[j];
31                 }
32             }
33         }
34     }
35     printf("%d\n", sum);
36     a[sum--] = '\0';
37     for( ; sum>=0; --sum, --x)
38     a[sum] = b[x];
39     printf("%s\n", a);
40     return 0;
41 }
复制代码

 

posted @   Gifur  阅读(923)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
TOP
点击右上角即可分享
微信分享提示