zoukankan      html  css  js  c++  java
  • Lec3最长公共子序列(子串)

    1.递归方法:

    //最大子串的递归解法
    #include <iostream>
    #include 
    <cstring>
    #include 
    <cstdio>
    using namespace std;

    int max(int a, int b)
    {
        
    return a>? a : b;
    }

    int lcs(char* a, char* b, int i, int j)
    {
        
    if (i == 0 || j == 0)
            
    return 0;
        
    if (*(a + i -1== *(b + j - 1))
            
    return lcs(a, b, i - 1, j - 1+1;
        
    else
            
    return max(lcs(a,b,i-1,j),lcs(a,b,i,j-1));
    }

    int main()
    {
        
    char a[500],b[500];
        
    int len1,len2;
        
    while (cin>>a>>b)
        {
            len1 
    = strlen(a);
            len2 
    = strlen(b);
            cout
    <<lcs(a,b,len1,len2)<<endl;
        }
    }

     2.迭代方法:

     1 //最大子串的迭代解法
     2 //非递归,用一个表做记录
     3 #include <iostream>
     4 #include <cstring>
     5 #include <cstdio>
     6 
     7 using namespace std;
     8 
     9 #define MAX 500
    10 int main()
    11 {
    12     char a[MAX],b[MAX];
    13     int dp[MAX][MAX];
    14     int i,j,len1,len2;
    15     while (cin>>a>>b)
    16     {
    17         len1 = strlen(a);
    18         len2 = strlen(b);
    19         for(i=0;i<len1;i++) dp[i][0= 0;
    20         for(j=0;j<len2;j++) dp[0][j] = 0;
    21 
    22         for (i=1;i<=len1;i++)
    23         {
    24             for (j=1;j<=len2;j++)
    25             {
    26                 if (a[i-1]==b[j-1])
    27                     dp[i][j]=dp[i-1][j-1]+1;
    28                 else
    29                     dp[i][j]=dp[i-1][j]>dp[i][j-1]?dp[i-1][j]:dp[i][j-1];
    30             }
    31         }
    32         cout<<dp[len1][len2]<<endl;
    33     }
    34 }
  • 相关阅读:
    mysql性能调优
    java面试大全
    JVM调优总结
    大数据行业跳槽面试前你需要做什么
    什么是分布式锁?实现分布式锁的方式
    如何保障mysql和redis之间的数据一致性?
    数据倾斜的原因和解决方案
    hive优化
    c# 系统换行符
    12种增强CSS技能并加快开发速度的资源
  • 原文地址:https://www.cnblogs.com/avril/p/2036149.html
Copyright © 2011-2022 走看看