当前位置: 代码迷 >> 综合 >> algorithm-最长公共子序列
  详细解决方案

algorithm-最长公共子序列

热度:106   发布时间:2023-11-22 07:34:59.0

题目描述

一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。

输入

第一行两个字符串用空格分开。两个串的长度均小于2000 。

输出

最长子串的长度。

样例输入 Copy

abccd aecd

样例输出 Copy

3
#include<iostream>
using namespace std;
int main() {string a, b;int** c;cin >> a >> b;int m = a.length();int n = b.length();c = new int* [m+1];for (int i = 0; i <=m; i++) {c[i] = new int[n+1];}for (int i = 0; i < m + 1; i++) {for (int j = 0; j < n + 1; j++) {if (i == 0 || j == 0)c[i][j] = 0;else if (a[i - 1] == b[j - 1])//最后一个字母相同就加1c[i][j] = c[i - 1][j - 1] + 1;elsec[i][j] = max(c[i - 1][j], c[i][j - 1]);//如果最后一位字母不同就去除去这个最大的数}//表是从前向后填的}cout<< c[m][n];}

  相关解决方案