Python最長(zhǎng)公共子串算法實(shí)例
本文實(shí)例講述了Python最長(zhǎng)公共子串算法。分享給大家供大家參考。具體如下:
#!/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): # length table: every element is set to zero. m = [ [ 0 for x in s2 ] for y in s1 ] # direction table: 1st bit for p1, 2nd bit for p2. d = [ [ None for x in s2 ] for y in s1 ] # we don't have to care about the boundery check. # 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. 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')
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
- python實(shí)現(xiàn)求兩個(gè)字符串的最長(zhǎng)公共子串方法
- 詳解Python最長(zhǎng)公共子串和最長(zhǎng)公共子序列的實(shí)現(xiàn)
- python實(shí)現(xiàn)對(duì)求解最長(zhǎng)回文子串的動(dòng)態(tài)規(guī)劃算法
- Python實(shí)現(xiàn)針對(duì)給定字符串尋找最長(zhǎng)非重復(fù)子串的方法
- Python簡(jiǎn)單實(shí)現(xiàn)查找一個(gè)字符串中最長(zhǎng)不重復(fù)子串的方法
- python實(shí)現(xiàn)求最長(zhǎng)回文子串長(zhǎng)度
- Python實(shí)現(xiàn)簡(jiǎn)單查找最長(zhǎng)子串功能示例
相關(guān)文章
anaconda?部署Jupyter?Notebook服務(wù)器過(guò)程詳解
這篇文章主要為大家介紹了anaconda?部署Jupyter?Notebook服務(wù)器過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Python實(shí)現(xiàn)讀取及寫(xiě)入csv文件的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)讀取及寫(xiě)入csv文件的方法,涉及Python針對(duì)csv格式文件的讀取、遍歷、寫(xiě)入等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01Python實(shí)現(xiàn)的井字棋(Tic Tac Toe)游戲示例
這篇文章主要介紹了Python實(shí)現(xiàn)的井字棋(Tic Tac Toe)游戲,結(jié)合實(shí)例形式分析了井字棋的原理及Python相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-01-01tensorflow學(xué)習(xí)筆記之mnist的卷積神經(jīng)網(wǎng)絡(luò)實(shí)例
這篇文章主要為大家詳細(xì)介紹了tensorflow學(xué)習(xí)筆記之mnist的卷積神經(jīng)網(wǎng)絡(luò)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04Python建立Map寫(xiě)Excel表實(shí)例解析
這篇文章主要介紹了Python建立Map寫(xiě)Excel表實(shí)例解析,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python中的單下劃線和雙下劃線使用場(chǎng)景詳解
這篇文章主要介紹了Python中的單下劃線和雙下劃線使用場(chǎng)景詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09對(duì)python中執(zhí)行DOS命令的3種方法總結(jié)
今天小編就為大家分享一篇對(duì)python中執(zhí)行DOS命令的3種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助一起。一起跟隨小編過(guò)來(lái)看看吧2018-05-05