文章
6
粉丝
58
获赞
0
访问
3.5k
经典问题两字符串比较的升级版本
动态规划数组dp[i][j][k]
存储的是字符串a[0...i-1]
、b[0...j-1]
和c[0...k-1]
的最长公共子序列。
#include <iostream>
#include <string>
using namespace std;
int main() {
// 从标准输入读取三个字符串
string a, b, c;
cin >> a >> b >> c;
// 计算每个字符串的长度
int lena = a.size();
int lenb = b.size();
int lenc = c.size();
// 创建三维动态规划数组,用于存储到当前位置为止的最长公共子序列
string dp[lena+1][lenb+1][lenc+1];
// 初始化动态规划数组的边界条件
dp[0][0][0] = "";
// 使用三重循环遍历所有可能的字符串组合
for (int i = 1; i <= lena; i++) {
for (int j = 1; j <= lenb; j++) {
for (int k = 1; k <= lenc; k++) {
// 如果当前字符在三个字符串中都相同,则将此字符添加到序列中
if (a[i - 1] == b[j - 1] && b[j - 1] == c[k - 1]) {
dp[i][j][k] = dp[i - 1][j - 1][k - 1] + a[i - 1];
} else {
// 否则,选择前一个状态中最长的子序列
int l1 = dp[i - 1][j][k].size();
...
登录后发布评论
暂无评论,来抢沙发