[second]Interleaving String
//DP
bool isInterleave(string s1, string s2, string s3) { // Note: The Solution object is instantiated only once and is reused by each test case. //DP if(s1.empty()&&s2.empty()&&s3.empty()) return true; int m = s1.size(); int n = s2.size(); if(m+n!=s3.size()) return false; vector<vector<bool>> dp(m+1,vector<bool>(n+1,false)); int i,j; dp[0][0] = true; for(j=1;j<=n;j++) { if(dp[0][j-1]&&s2[j-1]==s3[j-1]) dp[0][j] = true; } for(i=1;i<=m;i++) { if(dp[i-1][0]&&s1[i-1]==s3[i-1]) dp[i][0] = true; } for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { if(s1[i-1]==s3[i+j-1]&&s2[j-1]!=s3[i+j-1]) dp[i][j] = dp[i-1][j]; else if(s1[i-1]!=s3[i+j-1]&&s2[j-1]==s3[i+j-1]) dp[i][j] = dp[i][j-1]; else if(s1[i-1]==s3[i+j-1]&&s2[j-1]==s3[i+j-1]) dp[i][j] = dp[i][j-1]||dp[i-1][j]; } } return dp[m][n]; }