class Solution:
def LCS(self,A,B):
if not A or not B: #边界处理
return 0
dp = [[0 for _ in range(len(B)+1)]for _ in range(len(A)+1)]#状态定义,dp[i][j]表示当前最长公共的长度
for i in range(1,len(A)+1): #遍历A序列
for j in range(1,len(B)+1): #遍历B序列,时间复杂度为n2
if A[i-1] == B[j-1]: #如果此时两个值相等
dp[i][j] = dp[i-1][j-1] + 1 #状态转移为前一时刻状态加1
else: #不相等的话
dp[i][j] = max(dp[i][j-1],dp[i-1][j]) #当前时刻的状态为,前两个时刻的较大值
print(B)
self.printDP(dp)
return dp[-1][-1] #最优解是最后的状态值
def printDP(self,dp): #打印转态
for i in range(len(dp)):
for j in range(len(dp[i])):
print(dp[i][j],end=' ')
print() if __name__ == '__main__':
solution = Solution()
A = [1, 2, 3, 5, 2, 1]
B = [3, 2, 1, 4, 7]
res = solution.LCS(A,B)
print('最长公共子序列长度为:',res)

结果如下:[3,2,1]是最长的共子序列

最新文章

  1. iOS - 如何切图适配各种机型
  2. Redsi和Memcached区别总结
  3. python 虚拟环境
  4. this的作用--转载
  5. August 26th 2016 Week 35th Friday
  6. JVM相关问答
  7. 利用hadoop自带程序运行wordcount
  8. easy ui datagrid在没有数据时显示相关提示内容
  9. oracle触发器实例
  10. C语言日期时间标准库
  11. Lucene于Directory
  12. Mac本地编辑服务器代码
  13. 豹哥嵌入式讲堂:ARM知识概要杂辑(2)- 第一款Cortex-M处理器
  14. java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
  15. Junit 之 与Spring集成
  16. 纪念一下学写pipeline时脑子里的坑
  17. C#文件夹权限操作整理
  18. Docker Swarm 创建服务
  19. flash as3.0 截图保存图片
  20. word 大纲-目录

热门文章

  1. 2.NioEventLoop的创建
  2. 使用mavan构建自定义项目脚手架
  3. 1+X证书学习日志——css 3D效果+立方体效果的实现
  4. html 滚动条样式
  5. 全局启动函数start_kernel函数注解
  6. oracle 设置归档日模式
  7. Flask统计代码行数
  8. ISCC之msc4
  9. 常见的监控JVM的几个Linux命令和使用
  10. Django解析器