Given s1, S2, S3, find whether S3 are formed by the interleaving of S1 and s2.
For example,
Given:
S1 = "aabcc" ,
s2 = "dbbca" ,
When s3 = "aadbbcbcac" , return true.
When s3 = "aadbbbaccc" , return false.
Solution 1:dfs
classSolution:#@return A Boolean defIsinterleave (self, s1, S2, S3):ifLen (S1) +len (s2) = =Len (S3):returnSelf . DFS (S1,S2,S3)Else: returnFalsedefDFS (SELF,S1,S2,S3):if not(S1 andS2):ifS3 = = s1+S2:returnTrueElse: returnFalseifS1[0] = = S3[0] andSelf. DFS (s1[1:],s2,s3[1:]): returnTrueelifS2[0] = = S3[0] andSelf. DFS (s1,s2[1:],s3[1:]): returnTrueElse: returnFalse
Unfortunately, it's time-out.
Solution 2:bfs
ImportQueueclassSolution:#@return A Boolean defIsinterleave (self, s1, S2, S3):ifLen (S1) +len (s2) = =Len (S3):returnSelf . BFS (S1,S2,S3)Else: returnFalsedefBFS (SELF,S1,S2,S3): Q=Queue.queue (Len (S3)) Q.put ((0,0) ) while( notQ.empty ()): (x, y)=Q.get ()ifX==len (S1)ory = =len (S2):ifS3[x+y:] = = s1[x:]+s2[y:]:returnTrueElse: returnFalseifS1[X] = = s3[x+y]: Q.put ((x+1, y)) ifS2[y] = = s3[x+y]: Q.put ((x, y+1)) returnFalse
or Time out?
Leetcode interleaving String python solution