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;
}

目录
相关文章
|
1月前
acwing 895 最长上升子序列1
acwing 895 最长上升子序列1
28 3
|
1月前
acwing 897 最长公共子序列
acwing 897 最长公共子序列
20 0
acwing 897 最长公共子序列
|
1月前
acwing 896 最长上升子序列II
acwing 896 最长上升子序列II
25 2
|
1月前
|
机器学习/深度学习 人工智能 算法
【算法】最长公共子序列(C/C++)
【算法】最长公共子序列(C/C++)
|
6月前
leetcode-1143:最长公共子序列
leetcode-1143:最长公共子序列
57 0
|
6月前
leetcode-300:最长递增子序列
leetcode-300:最长递增子序列
43 0
|
存储 算法
7-181 最长连续递增子序列
7-181 最长连续递增子序列
51 0
leetcode 1143 最长的公共子序列
leetcode 1143 最长的公共子序列
91 0
leetcode 1143 最长的公共子序列
leetcode 300 最长递增子序列
leetcode 300 最长递增子序列
78 0
leetcode 300 最长递增子序列
|
算法 Python
LeetCode 300. 最长递增子序列
最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
122 0