題目
LeetCode - 97. Interleaving String
解題思路
題目要求判斷s3這個字串是否由s1及s2交錯組成,這題使用dp就可以解決了定義dp[i][j]: s3[0:i+j] 是不是由 s1[0:i] and s2[0:j]所組成
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution: def isInterleave(self, s1: str, s2: str, s3: str) -> bool: m ,n ,l = len(s1),len(s2),len(s3) if m+n != l: return False s1 = '#'+s1 s2 = '#'+s2 s3 = '#'+s3 dp = [[ False for _ in range(n+1)] for _ in range(m+1)] dp[0][0] = True for i in range(1, m+1): dp[i][0] = (dp[i-1][0]==True and s1[i] == s3[i]) for j in range(1, n+1): dp[0][j] = (dp[0][j-1]==True and s2[j] == s3[j]) for i in range(1, m+1): for j in range(1, n+1): if dp[i-1][j] == True and s1[i] == s3[i+j]: dp[i][j] = True elif dp[i][j-1] == True and s2[j] == s3[i+j]: dp[i][j] = True return dp[m][n]
|