LCSのPython実装:
1つの #は/ usr / binに/ ENVパイソン! 2 #- * -コーディング:UTF-8 - * - 3つの インポートSYS 4 5 リロード(SYS) 6(sys.setdefaultencoding ' UTF-8 ' ) 7 8 9 クラスLCS(オブジェクト): 10 "" " ロング共通部分算法 11 """ 12 DEF __init__ :(自己、STR1、STR2) 13 = self.s1 STR1 14 self.s2 = STR2 15 self.lcs = [ '' のための私中範囲(LEN(self.s2)+ 1)] のための J でレンジ(LEN(self.s1)+ 1)] #別の方法 16 17。 DEF (セルフ)get_lcs_len: 18である " "" 再帰的計算LCSの長さ 。19 "" " 20である ため I にはxrange(LEN(self.s1)+ 1 ): 21である ために J で(。+ LEN(self.s2)1はxrange ): 22である IF I == 0 または Jの== 0 23は セルフ.lcs [I、J] = 0 24 ELIFの self.s1 [I - 1] == self.s2 [J - 1 ]: 25 self.lcs [I、J] = self.lcs [I - 1] [J - 1] + 1 26 他: 27 self.lcs [I、J] = MAX(self.lcs [I - 1] [J] 、self.lcs [I]、[J - 1 ]) 28 リターンself.lcs [LEN(self.s1)、LEN(self.s2)] 29 30 DEF get_lcs(自己): 31 ""」递归计算LCS(直接获取LCS) 32 ""」 33 のための私にはxrange(LEN(self.s1)+ 1 ): 34 用の J ではxrange(LEN(self.s2)+ 1 ): 35 であれば、I == 0 又は jは== 0 : 36 self.lcs [I] [J] = '' 37 のelif self.s1 [I - 1] == self.s2 [J - 1 ]: 38 self.lcs [I] [J] = self.lcs [iが- 1] [J - 1] + self.s1 [I - 1 ] 39 他: 40 self.lcs [I] [J] = self.lcs [I - 1] [j]の場合 - (self.lcs [Iでlen 1] [J])> \ 41 LEN(self.lcs [I] [J - 1])他の self.lcs [I] [J - 1 ] 42 リターンself.lcs [LEN(self.s1)] [LEN (self.s2)] 43 44 45 46 なら __name__ == ' __main__' : 47 、S1 = ' abcdefgw ' 48 、S2 = ' bdfgegwe ' 49 モデル= LCS(S1、S2) 50 印刷 model.get_lcs()