Хорошая попытка.
Обратите внимание, что вы используете индекс от i
до l oop до s1
во внешнем l oop и от j
до l oop до s2
во внутренней l oop.
Вы должны позволить s1
и s2
иметь длину s2
плюс 1
, внутреннюю l oop длину плюс 1
.
Кроме того, вы по ошибке используете j
для доступа к s1
и i
для доступа к s2
в своей реализации.
Наконец, чтобы преодолеть проблему тайм-аута, вместо обычного Python, используйте вместо этого PyPy.
def commonChild(s1, s2):
nr = 0
while s1[0]==s2[0]:
nr+=1
s1=s1[1::]
s2=s2[1::]
while s1[-1]==s2[-1]:
nr+=1
s1=s1[0:-1]
s2=s2[0:-1]
#row1 = [0]*(len(s1)+1)
#row2 = [0]*(len(s1)+1)
row1 = [0]*(len(s2)+1)
row2 = [0]*(len(s2)+1)
for i in range(1,len(s1)+1):
for j in range(1,len(s2)+1):
#if s1[j-1]==s2[i-1]:
if s1[i-1] == s2[j-1]:
row2[j]=row1[j-1]+1
else:
row2[j]=max(row2[j-1], row1[j])
row1=row2
#row2=[0]*(len(s1)+1)
row2 = [0]*(len(s2)+1)
return row1[-1]+nr