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!

  • 相关阅读:
    paip.重装系统需要备份的资料总结..
    poj3078
    poj3009
    poj2151
    poj3274
    poj3436
    VC++:打开、保存文件对话框和浏览文件夹对话框
    目前所有的视频格式都有哪些?
    CMSHFlexGrid 类用法
    Matlab的ActiveX接口_百度文库
  • 原文地址:https://www.cnblogs.com/wangshengjun/p/lianxuzichuang.html
Copyright © 2011-2022 走看看