• 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 }
    物役记

    更多内容请关注个人微信公众号 物役记 (微信号:materialchains)

  • 相关阅读:
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    团 队 作 业 ———— 随 堂 小 测
    Alpha 冲刺 (5/10)
    Alpha 冲刺 (4/10)
    Beta冲刺博客汇总(麻瓜制造者)
    Beta冲刺(3/5)(麻瓜制造者)
    快速搭建一个Express工程骨架
    个人作业——软件产品案例分析
  • 原文地址:https://www.cnblogs.com/liaoguifa/p/3031725.html
Copyright © 2020-2023  润新知