zoukankan      html  css  js  c++  java
  • 最长公共子串

    这个算法跟LCS 差不多

    偷笑

    LCS算法链接:https://www.cnblogs.com/wangshengjun/p/LCS.html

    这里的f i j 是由 F[i-1[j-1] +1 转移过来的

    因为要特判,只要两个串不相等直接等于0。

    如果 把 a 串  看成字符数组 s1[], b 串 看成 s2[] ;

    则 :

         如果s1[i]!=s2[j] 

         那么 F【i] [j] = 0; (只要两个串不相等直接等于0).

         代码如下:

    f[i][j]=0;
    

      

         一但相等

          就由 F[i-1][j-1] +1 转移过来 (这个跟LCS第二个特判差不多)

         代码如下:

    f[i][j]=f[i-1][j-1]+1;
    

      

    最后在所有的F[i][j] 中取一个最大值max;

          代码如下:

    if(ans<f[i][j])ans=f[i][j];
    

    将dp转移方程抽象为图,如图:

    最后附上代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 char s1[50000],s2[50000];
     4 int f[500][500],ans=0;
     5 int main()
     6 {
     7     scanf("%s%s",s1+1,s2+1);
     8     int l1=strlen(s1+1),l2=strlen(s2+1);
     9     for(int i=1;i<=l1;i++)
    10         for(int j=1;j<=l2;j++){
    11             if(s1[i]!=s2[j])f[i][j]=0;
    12             else f[i][j]=f[i-1][j-1]+1;
    13             if(ans<f[i][j])ans=f[i][j];
    14         }
    15     printf("%d",ans);
    16     return 0;
    17 }

    OVER!

  • 相关阅读:
    JS中iframe子页面与父页面之间通信
    .NET 大数据量并发解决方案
    angular的性能分析 -随记
    第二次作业
    自我介绍
    总结作业
    2019春第四次课程设计实验报告
    2019春第三次课程设计实验报告
    2019春第二次课程设计实验报告
    第十二周作业
  • 原文地址:https://www.cnblogs.com/wangshengjun/p/lianxuzichuang.html
Copyright © 2011-2022 走看看