POJ 1458

给出两个字符串,求它们最长的公共子字符串长度。

如abfgc  acbfefc

最长的公共子字符串为abfc   长度为4

思路:找到s1[i]与s2[j]的时候,相等的话,dp[i+1][j+1]=dp[i][j]+1;

    不等的话dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);

#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int dp[300][300];
int main()
{   string s1,s2;
    while(cin>>s1>>s2){
      memset(dp,0,sizeof(dp));
      for(int i=0;i<s1.size();i++){
          for(int j=0;j<s2.size();j++){
              if(s1[i]==s2[j]){
                  dp[i+1][j+1]=dp[i][j]+1;
              }
              else {
                  dp[i+1][j+1]=dp[i][j+1];
                  if(dp[i+1][j]>dp[i][j+1])dp[i+1][j+1]=dp[i+1][j];
              }
          }
      }
      cout<<dp[s1.size()][s2.size()]<<endl;
  }
    return 0;
}

原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/3850836.html