C++练习 | 最长公共字符串(DP)

Posted tsj816523

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++练习 | 最长公共字符串(DP)相关的知识,希望对你有一定的参考价值。

HDU 1159.Common Subsequence

#include<iostream>
#include<stdio.h>
#include<string>
#include<cstring>
#include<string.h>
using namespace std;
int dp[10007][10007];//a的前i个字母与b的前j个字母的有序交集长度
int main()

    // freopen("01.in","r",stdin);
    string a,b;
    while(cin>>a>>b)
    
        int m=a.length();
        int n=b.length();
        dp[0][0]=0;
        for(int i=0;i<m;i++)
        
            for(int j=0;j<n;j++)
            
                if(a[i]==b[j])
                
                    if(j!=0&&i!=0)
                        dp[i][j]=dp[i-1][j-1]+1;
                    else
                        dp[i][j]=1;
                
                else
                
                    if(j!=0&&i!=0)
                    
                        dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
                    
                    else if(i==0)
                    
                        dp[i][j]=max(0,dp[i][j-1]);
                        
                    else
                    
                        dp[i][j]=max(0,dp[i-1][j]);
                        
                
            
        
        cout<<dp[m-1][n-1]<<endl;
    
    return 0;

零点处理有些过于麻烦了,可以通过更改i,j初始值简化,但是懒得改了

不算太明白以后再看看

以上是关于C++练习 | 最长公共字符串(DP)的主要内容,如果未能解决你的问题,请参考以下文章

最长公共子序列LCS (DP)

5.23算法练习最长公共子序列

java 两个字符串,求最长公共子串的长度

Leetcode练习(Python):字符串类:第14题:最长公共前缀:编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。

Leetcode练习(Python):字符串类:第14题:最长公共前缀:编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。

dp之最长公共子序列