classSolution{public:boolisInterleave(strings1,strings2,strings3){constintm=s1.length();constintn=s2.length();if(m+n!=s3.length())returnfalse;// dp[i][j] := true if s3[0..i + j) is formed by the interleaving of// s1[0..i) and s2[0..j)vector<vector<bool>>dp(m+1,vector<bool>(n+1));dp[0][0]=true;for(inti=1;i<=m;++i)dp[i][0]=dp[i-1][0]&&s1[i-1]==s3[i-1];for(intj=1;j<=n;++j)dp[0][j]=dp[0][j-1]&&s2[j-1]==s3[j-1];for(inti=1;i<=m;++i)for(intj=1;j<=n;++j)dp[i][j]=dp[i-1][j]&&s1[i-1]==s3[i+j-1]||dp[i][j-1]&&s2[j-1]==s3[i+j-1];returndp[m][n];}};
classSolution{publicbooleanisInterleave(Strings1,Strings2,Strings3){finalintm=s1.length();finalintn=s2.length();if(m+n!=s3.length())returnfalse;// dp[i][j] := true if s3[0..i + j) is formed by the interleaving of// s1[0..i) and s2[0..j)boolean[][]dp=newboolean[m+1][n+1];dp[0][0]=true;for(inti=1;i<=m;++i)dp[i][0]=dp[i-1][0]&&s1.charAt(i-1)==s3.charAt(i-1);for(intj=1;j<=n;++j)dp[0][j]=dp[0][j-1]&&s2.charAt(j-1)==s3.charAt(j-1);for(inti=1;i<=m;++i)for(intj=1;j<=n;++j)dp[i][j]=dp[i-1][j]&&s1.charAt(i-1)==s3.charAt(i+j-1)||dp[i][j-1]&&s2.charAt(j-1)==s3.charAt(i+j-1);returndp[m][n];}}
classSolution:defisInterleave(self,s1:str,s2:str,s3:str)->bool:m=len(s1)n=len(s2)ifm+n!=len(s3):returnFalse# dp[i][j] := true if s3[0..i + j) is formed by the interleaving of# s1[0..i) and s2[0..j)dp=[[False]*(n+1)for_inrange(m+1)]dp[0][0]=Trueforiinrange(1,m+1):dp[i][0]=dp[i-1][0]ands1[i-1]==s3[i-1]forjinrange(1,n+1):dp[0][j]=dp[0][j-1]ands2[j-1]==s3[j-1]foriinrange(1,m+1):forjinrange(1,n+1):dp[i][j]=(dp[i-1][j]ands1[i-1]==s3[i+j-1])or \
(dp[i][j-1]ands2[j-1]==s3[i+j-1])returndp[m][n]