给定两个字符串str1和str2,输出两个字符串的最长公共子串
题目保证str1和str2的最长公共子串存在且唯一。
方法1:转移数组
既然题目保证最长公共子串存在且唯一,那就不用做各种判断了。
def LCS(str1 , str2 ):
# write code here
m=len(str1)
n=len(str2)
dp=[[0 for _ in range(n+1)]for _ in range(m+1)]
pos=0
max_len=0
for i in range(1,m+1):
for j in range(1,n+1):
if str1[i-1]==str2[j-1]:
dp[i][j]=1+dp[i-1][j-1]
if dp[i][j]>max_len:
max_len=dp[i][j]
pos=i-1
res=str1[pos-max_len+1:pos+1]
return res
方法2:滑动窗口
滑动窗口最关键的代码在于sub=str1[right-left:right],right-left保证了窗口的长度,这样只会存储最长的子串。
def LCS(str1 , str2 ):
left=0
res=""
for right in range(len(str1)+1):
sub=str1[right-left:right]
if sub in str2:
res=sub
left+=1
return res
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)