题目描述
给定两个字符串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]

该博客主要讨论如何找到两个给定字符串的最长公共子串。通过动态规划的方法,实现了一个名为LCS的函数,该函数遍历输入的字符串str1和str2,构建二维矩阵并保存最长公共子串的长度。当找到最长公共子串时,返回其实际值。这个算法确保了最长公共子串的存在性和唯一性。
524

被折叠的 条评论
为什么被折叠?



