Python算法--最长公共子串算法代码讲解,python算法,Python如何匹配最长
Python算法--最长公共子串算法代码讲解,python算法,Python如何匹配最长
Python如何匹配最长公共子序列算法?本文就为大家提供了关于Python算法--最长公共子串算法代码讲解案例教程。这属于python基础算法、Python字符串处理其中的一项。
如下代码中使用到了python 列表排序中的reverse方法。
Python算法--最长公共子串算法代码讲解,以下代码供大家学习参考使用。
#!/usr/bin/env python # find an LCS (Longest Common Subsequence). # *public domain* def find_lcs_len(s1, s2): m = [ [ 0 for x in s2 ] for y in s1 ] for p1 in range(len(s1)): for p2 in range(len(s2)): if s1[p1] == s2[p2]: if p1 == 0 or p2 == 0: m[p1][p2] = 1 else: m[p1][p2] = m[p1-1][p2-1]+1 elif m[p1-1][p2] < m[p1][p2-1]: m[p1][p2] = m[p1][p2-1] else: # m[p1][p2-1] < m[p1-1][p2] m[p1][p2] = m[p1-1][p2] return m[-1][-1] def find_lcs(s1, s2): # 长度表:每个元素被设置为零。 m = [ [ 0 for x in s2 ] for y in s1 ] # 方向表: 1st bit for p1, 2nd bit for p2. d = [ [ None for x in s2 ] for y in s1 ] # a negative index always gives an intact zero. for p1 in range(len(s1)): for p2 in range(len(s2)): if s1[p1] == s2[p2]: if p1 == 0 or p2 == 0: m[p1][p2] = 1 else: m[p1][p2] = m[p1-1][p2-1]+1 d[p1][p2] = 3 # 11: decr. p1 and p2 elif m[p1-1][p2] < m[p1][p2-1]: m[p1][p2] = m[p1][p2-1] d[p1][p2] = 2 # 10: decr. p2 only else: # m[p1][p2-1] < m[p1-1][p2] m[p1][p2] = m[p1-1][p2] d[p1][p2] = 1 # 01: decr. p1 only (p1, p2) = (len(s1)-1, len(s2)-1) # now we traverse the table in reverse order. #www.iplaypy.com s = [] while 1: print p1,p2 c = d[p1][p2] if c == 3: s.append(s1[p1]) if not ((p1 or p2) and m[p1][p2]): break if c & 2: p2 -= 1 if c & 1: p1 -= 1 s.reverse() return ''.join(s) if __name__ == '__main__': print find_lcs('abcoisjf','axbaoeijf') print find_lcs_len('abcoisjf','axbaoeijf')
编橙之家文章,
相关内容
- 如何用Python os.path.walk方法遍历搜索文件内容的操作详解
- Python脚本随机生成中文验证码源码实例分析,python实例
- Python标准库模块之Sys使用详解,python使用详解,本文主要
- 本地服务更新Python代码 如要使用请适当的修改,pytho
- python抽奖 系统算法代码的简单实现,python抽奖算法代码
- 如何用Python代码实现自动比较两个文件中的代码变化?
- python logging 日志模块使用方法学习,pythonlogging,本文为
- Python近期使用较少算法实现方法,python近期较少算法
- 用Python来处理中文分句的方法_【源码精华】,,我在用
- 用Python生成随机的中文验证码图片,,在登录很多网站的
评论关闭