不同长度数组的公共子序列
创始人
2025-01-10 00:32:16
0

以下是一个示例代码,可以找到两个不同长度数组的最长公共子序列:

def longest_common_subsequence(arr1, arr2):
    m = len(arr1)
    n = len(arr2)
    dp = [[0] * (n+1) for _ in range(m+1)]
    
    for i in range(1, m+1):
        for j in range(1, n+1):
            if arr1[i-1] == arr2[j-1]:
                dp[i][j] = dp[i-1][j-1] + 1
            else:
                dp[i][j] = max(dp[i-1][j], dp[i][j-1])
    
    # 构建最长公共子序列
    lcs = []
    i, j = m, n
    while i > 0 and j > 0:
        if arr1[i-1] == arr2[j-1]:
            lcs.append(arr1[i-1])
            i -= 1
            j -= 1
        elif dp[i-1][j] > dp[i][j-1]:
            i -= 1
        else:
            j -= 1
    
    lcs.reverse()
    return lcs

# 示例测试
arr1 = [1, 2, 3, 4, 5]
arr2 = [3, 4, 5, 6]
print(longest_common_subsequence(arr1, arr2))

输出结果为:[3, 4, 5]

这个示例代码使用动态规划的方法来解决问题。首先创建一个二维数组dp,其中dp[i][j]表示arr1前i个元素和arr2前j个元素的最长公共子序列长度。然后使用两个嵌套的循环来遍历数组arr1和arr2,如果当前元素相等,则将dp[i][j]设置为dp[i-1][j-1]+1,否则取dp[i-1][j]和dp[i][j-1]的较大值。

最后,根据dp数组构建最长公共子序列。从dp[m][n]开始,如果arr1[i-1]等于arr2[j-1],则将该元素添加到结果列表lcs中,同时i和j都减1;否则,根据dp[i-1][j]和dp[i][j-1]的大小关系,决定i或j减1。最后,反转结果列表lcs并返回。

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
AWSECS:哪种网络模式具有... 使用AWS ECS中的awsvpc网络模式来获得最佳性能。awsvpc网络模式允许ECS任务直接在V...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...