文章

99

粉丝

120

获赞

8

访问

97.5k

头像
最长公共子序列LCS
备考心情
发布于2024年7月28日 12:27
阅读数 884

#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();
                    int l2 = dp[i][j - 1][k].size();
                    int l3 = ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发