题目描述
给定两个字符串str1和str2,输出两个字符串的最长公共子串
题目保证str1和str2的最长公共子串存在且唯一。
# longest common substring
# @param str1 string字符串 the string
# @param str2 string字符串 the string
# @return string字符串
#
class Solution:
def LCS(self , str1 , str2 ):
# write code here
if len(str1)==0 or len(str2)==0:
return 0
L = len(str1)
S = len(str2)
#保存最大值
max = 0
#保存最大值的行位置
local = 0
#创建二维矩阵
list = [[0]*L for i in range(0,S)]
#遍历第一行
for j in range(0,L):
if str2[0] == str1[j]:
list[0][j] = 1
if list[0][j] > max:
max = list[0][j]
local = 0
#遍历第一列
for i in range(1,S):
if str1[0] == str2[i]:
list[i][0] = 1
if list[i][0] > max:
max = list[0][j]
local = i
for i in range(1,S):
for j in range(1,L):
if str2[i] == str1[j]:
list[i][j] = list[i-1][j-1] + 1
if list[i][j] > max:
max = list[i][j]
local = i
return str2[local-max+1:local+1]