三个字符串的LCS
来源:互联网 发布:cocos2d-x用js编写 编辑:程序博客网 时间:2024/05/21 09:46
RT,类比二维的情况,申请一个三维矩阵即可,无非是遍历矩阵时判断的条件多一点而已。
Python代码:
#coding=utf-8import sysdef Matrix(rows,cols,heights): matrix = [[[0 for height in range(heights+1)] for col in range(cols+1)] for row in range(rows+1)] return matrixdef Mark(rows,cols,heights): matrix = [[['000' for height in range(heights+1)] for col in range(cols+1)] for row in range(rows+1)] return matrixdef printf(mk,x,i,j,k): if i==0 or j==0 or k==0:return if mk[i][j][k]=='111': printf(mk,x,i-1,j-1,k-1) sys.stdout.write(x[i-1]) elif mk[i][j][k]=='110': printf(mk,x,i-1,j-1,k) elif mk[i][j][k]=='101': printf(mk,x,i-1,j,k-1) elif mk[i][j][k]=='100': printf(mk,x,i-1,j,k) elif mk[i][j][k]=='011': printf(mk,x,i,j-1,k-1) elif mk[i][j][k]=='010': printf(mk,x,i,j-1,k) elif mk[i][j][k]=='001': printf(mk,x,i,j,k-1)while True: x=raw_input() y=raw_input() z=raw_input() (m,n,w)=(len(x),len(y),len(z)) mat = Matrix(m,n,w) mk = Mark(m,n,w) dp =['001','010','011','100','101','110'] for i in range(1,m+1): for j in range(1,n+1): for k in range(1,w+1): #print "i=%d,j=%d,k=%d" %(i,j,k) if x[i-1]==y[j-1] and y[j-1]==z[k-1]: mat[i][j][k]=mat[i-1][j-1][k-1]+1 mk[i][j][k]='111' elif x[i-1]==y[j-1] and y[j-1]!=z[k-1]: if mat[i][j][k-1]>mat[i-1][j-1][k]: mat[i][j][k]=mat[i][j][k-1] mk[i][j][k]='001' else: mat[i][j][k]=mat[i-1][j-1][k] mk[i][j][k]='110' elif x[i-1]==z[k-1] and z[k-1]!=y[j-1]: if mat[i][j-1][k]>mat[i-1][j][k-1]: mat[i][j][k]=mat[i][j-1][k] mk[i][j][k]='010' else: mat[i][j][k]=mat[i-1][j][k-1] mk[i][j][k]='101' elif y[j-1]==z[k-1] and z[k-1]!=x[i-1]: if mat[i-1][j][k]>mat[i][j-1][k-1]: mat[i][j][k]=mat[i-1][j][k] mk[i][j][k]='100' else: mat[i][j][k]=mat[i][j-1][k-1] mk[i][j][k]='011' else: lst=[mat[i][j][k-1],mat[i][j-1][k],mat[i][j-1][k-1], mat[i-1][j][k],mat[i-1][j][k-1],mat[i-1][j-1][k]] p=lst.index(max(lst)) mat[i][j][k]=max(lst) mk[i][j][k]=dp[p] print "LEN=%d" % mat[m][n][w] sys.stdout.write("LCS=") printf(mk,x,m,n,w) sys.stdout.write('\n')
0 0
- 三个字符串的LCS
- 三个字符串相加的例子
- 拼接字符串的三个方式
- 三个关于字符串的考点
- LCS 两个字符串的最大公共子字符串
- LCS 两个字符串的最大公共子字符串
- 给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。C实现
- NYOJ37回文字符串【LCS】
- LCS - 输出字符串
- LCS求两个字符串的最大公共子串
- 求两个字符串的最长公共子串(LCS)
- 两个字符串最长的公共字串问题(LCS)
- 求两个字符串的最长公共子串(LCS)
- 求两个字符串的最长公共子串(LCS)
- Levenshtein Distance + LCS 算法计算两个字符串的相似度
- [Python]实现字符串反转的三个方法
- 三个字符串的最长公共子序列
- 与字符串数组有关的三个函数
- LeetCode(67)Plus One
- 面试中的二叉树问题总结【Java版】
- linux minicom
- ubuntu 常用命令
- JAVA中文件夹的复制和文件的遍历
- 三个字符串的LCS
- linux下的.run包的制作
- tomcat报503 或者无法启动应用
- 离开大都市之后
- Lua模式匹配
- PDB文件:每个开发人员都必须知道的
- iOS基础知识之——怎样能直接发送短信而不调出发送短信的send界面
- 跟我一起学extjs5(40--增加一个自定义模块[1建立表和bean文件])
- android 中如何获取IMEI号