【问题描述】
编写一个程序,对输入的字符串s和t,求其最长的公共子字符串。
【输入形式】
从屏幕分行读入串s和t。s和t由任意字符构成,长度都不超50个字符。输入数据确保只有唯一的最长公共子串。如果没有公共子串,打印No Answer
【输出形式】
在单独行上输出串s和串t的最长公共子串,在结尾输出一个回车符。
算法提示:用一个int型的计数器记录当前匹配长度,用一个字符数组记录当前匹配子串,如果存在更长子串,则进行相应替换。
【样例说明】
假设从屏幕输入以下内容:
aabcdababce
12abcabcdace
则输出内容为:
abcda
def maxstr(s,t):
res = []
for i in range(len(s)):
for j in range(i+1,len(s)+1):
if s[i:j] in t:
res.append(s[i:j])
if len(res)==0:
return 'No Answer'
res = sorted(res, key=lambda x:len(x))
return res[-1]
if __name__=='__main__':
s, t = input(), input()
res = maxstr(s, t)
print(res)
如有帮助,请点个采纳,谢谢!
def getmaxstr(str1,str2):
lstr1=len(str1)
lstr2=len(str2)
record=[[0 for i in range(lstr2+1)] for j in range(lstr1+1)]
maxNum=0
p=0
for i in range(lstr1):
for j in range(lstr2):
if str1[i]==str2[j]:
record[i+1][j+1]=record[i][j]+1
if record[i+1][j+1]>maxNum:
maxNum=record[i+1][j+1]
p=i+1
return str1[p-maxNum:p]
if __name__=='__main__':
str1=input()
str2=input()
res=getmaxstr(str1,str2)
print(res)