题解 | #最长公共子串#

最长公共子串

https://www.nowcoder.com/practice/210741385d37490c97446aa50874e62d

#include <iostream>
#include<string>
using namespace std;
string s1,s2;
int maxi=0;
int u=0;
int dp[5000][5000];
int main() {
    cin>>s1>>s2;
    int n=s1.size();
    int m=s2.size();
    for(int i=0;i<n;i++)
       if(s1[i]==s2[0])
       dp[i][0]=1;
    for(int i=0;i<m;i++)
        if(s1[0]==s2[i])
        dp[0][i]=1;
    for(int i=1;i<n;i++)
      for(int j=1;j<m;j++)
      {
        if(s1[i] ==s2[j])
        dp[i][j]=dp[i-1][j-1]+1;
      }
    for(int i=1;i<n;i++)
      for(int j=1;j<m;j++)
      {
        if(maxi<dp[i][j])
        {
             u=i;
           maxi=dp[i][j];
        }
      }
      if(maxi==0)
      {
        cout<<-1;
        return 0;
      }
      int v=maxi;
      int ma=maxi-1;
      for(int i=0;i<v;i++)
      {
            cout<<s1[u-ma];
            ma--;
      }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

07-29 14:27
门头沟学院 Java
LMQICU:大暴雨阁下真的没绷住
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
06-26 15:33
青岛工学院 Java
积极的秋田犬要冲国企:他现在邀请我明天面试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务