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!

  • 相关阅读:
    UVa 839 -- Not so Mobile(树的递归输入)
    UVa 548 -- Tree
    UVA 122 -- Trees on the level (二叉树 BFS)
    UVa679 小球下落(树)
    POJ 2255 -- Tree Recovery
    POJ 1451 -- T9
    POJ 2513 -- Colored Sticks
    STL -- heap结构及算法
    nginx利用try_files实现多个源
    nginx location的优先级
  • 原文地址:https://www.cnblogs.com/wangshengjun/p/lianxuzichuang.html
Copyright © 2011-2022 走看看