Acwing 3692. 最长连续公共子序列

简介: Acwing 3692. 最长连续公共子序列

Acwing 3692. 最长连续公共子序列


目录:


题目:


输入两个字符串 s1,s2s1,s2。

输出最长连续公共子串长度和最长连续公共子串。

输入格式

一行,两个字符串 s1,s2s1,s2,用空格隔开。

输出格式

第一行输出最长连续公共子串的长度

第二行输出最长连续公共子串。如果不唯一,则输出最后一个。


数据范围


1≤|s1|,|s2|≤1001≤|s1|,|s2|≤100


输入样例:


abcdefg qwercdefiok


输出样例:


1. 4
2. cdef


思路:


动态规划,不断更新最长连续公共子串,并记录末端位置。

核心代码:

            if(x[i-1]==y[j-1])
      {
        dp[i][j]=dp[i-1][j-1]+1;//在上一对应相同的后面加1
        if(dp[i][j]>=sum)//更新长度
        {
          sum=dp[i][j];
          end=i-1;//记录公共子串末端位置
        }
      }


AC代码:


#include<bits/stdc++.h>
using namespace std;
int dp[105][105];
int main()
{
  string x,y;
  cin>>x>>y;
  int sum=0,end=0;
  int n=x.size();
  int nn=y.size();
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=nn;j++)
    {
      if(x[i-1]==y[j-1])
      {
        dp[i][j]=dp[i-1][j-1]+1;
        if(dp[i][j]>=sum)
        {
          sum=dp[i][j];
          end=i-1;
        }
      }
    }
  }
  cout<<sum<<endl;
  for(int i=end-sum+1;i<=end;i++)
  cout<<x[i];
  cout<<endl;
  return 0;
}

目录
相关文章
|
4月前
代码随想录 Day44 动规12 LeetCode T300 最长递增子序列 T674 最长连续递增序列 T718 最长重复子数组
代码随想录 Day44 动规12 LeetCode T300 最长递增子序列 T674 最长连续递增序列 T718 最长重复子数组
43 0
|
4月前
leetcode-1143:最长公共子序列
leetcode-1143:最长公共子序列
27 0
|
4月前
leetcode-300:最长递增子序列
leetcode-300:最长递增子序列
22 0
|
6月前
|
算法
代码随想录算法训练营第五十二天 | LeetCode 300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
代码随想录算法训练营第五十二天 | LeetCode 300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
38 1
|
12月前
|
算法 C++
每日算法系列【LeetCode 128】最长连续序列
每日算法系列【LeetCode 128】最长连续序列
|
12月前
|
存储 算法
7-181 最长连续递增子序列
7-181 最长连续递增子序列
39 0
leetcode 673 最长递增子序列的个数
leetcode 673 最长递增子序列的个数
52 0
leetcode 1143 最长的公共子序列
leetcode 1143 最长的公共子序列
70 0
leetcode 1143 最长的公共子序列
leetcode 300 最长递增子序列
leetcode 300 最长递增子序列
62 0
leetcode 300 最长递增子序列
|
算法 Python
LeetCode 300. 最长递增子序列
最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
94 0