I have two versions of making (len(s1+1) x len(s2+1)) 2D-array of Trues
dp1 = [[True] * (len(s2) + 1)] * (len(s1) + 1)
dp2 = [[True for _ in range(len(s2 + 1)] for _ in range(len(s1) + 1)]
The printed result looks like
[[True, True, True, True], [True, True, True, True], [True, True, True, True], [True, True, True, True]]
[[True, True, True, True], [True, True, True, True], [True, True, True, True], [True, True, True, True]]
They look identical but when run it through a code
for i in range(1, r + 1):
dp[i][0] = dp[i - 1][0] and s1[i - 1] == s3[i - 1]
for j in range(1, c + 1):
dp[0][j] = dp[0][j - 1] and s2[j - 1] == s3[j - 1]
for i in range(1, r + 1):
for j in range(1, c + 1):
dp[i][j] = (dp[i - 1][j] and s1[i - 1] == s3[i - 1 + j]) or (
dp[i][j - 1] and s2[j - 1] == s3[i - 1 + j]
)
It gives a different result of
ver1
[[False, False, False, False], [False, False, False, False], [False, False, False, False], [False, False, False, False]]
ver2
[[True, False, False, False], [True, False, False, False], [True, True, True, True], [False, True, True, True]]
Can anyone explain why such a difference is occurring??