<awangdev>Interleaving String_3.java
public boolean isInterleave(String s1, String s2, String s3) {
        if (s3 == null || (s1 == null && s2 == null) || s1.length() + s2.length() != s3.length()) {
        	return false;
        }
        boolean[][] DP = new boolean[s1.length() + 1][s2.length() + 1];
        DP[0][0] = true; 

        for (int i = 1; i <= s1.length(); i++) {
        	if (s3.charAt(i - 1) == s1.charAt(i - 1) && DP[i - 1][0]) {
        		DP[i][0] = true;
        	}
        }

        for (int j = 1; j <= s2.length(); j++) {
        	if (s3.charAt(j - 1) == s2.charAt(j - 1) && DP[0][j - 1]) {
        		DP[0][j] = true;
        	}
        }

        for (int i = 1; i <= s1.length(); i++) {
        	for (int j = 1; j <= s2.length(); j++) {
        		if ((s3.charAt(i + j - 1) == s1.charAt(i - 1) && DP[i - 1][j]) 
        			|| (s3.charAt(i + j - 1) == s2.charAt(j - 1) && DP[i][j - 1])) {
        			DP[i][j] = true;
        		}
        	}
        }

        return DP[s1.length()][s2.length()];
    }
public boolean var_0 ( String var_2 , String var_3 , String var_4 ) {
  if ( var_4 == null || ( var_2 == null && var_3 == null ) || var_2 . length ( ) + var_3 . length ( ) != var_4 . length ( ) ) {
    return false ;
  }
  boolean [ ] [ ] var_9 = new boolean [ var_2 . length ( ) + 1 ] [ var_3 . length ( ) + 1 ] ;
  var_9 [ 0 ] [ 0 ] = true ;
  for ( int var_10 = 1 ;
  var_10 <= var_2 . length ( ) ;
  var_10 ++ ) {
    if ( var_4 . charAt ( var_10 - 1 ) == var_2 . charAt ( var_10 - 1 ) && var_9 [ var_10 - 1 ] [ 0 ] ) {
      var_9 [ var_10 ] [ 0 ] = true ;
    }
  }
  for ( int var_13 = 1 ;
  var_13 <= var_3 . length ( ) ;
  var_13 ++ ) {
    if ( var_4 . charAt ( var_13 - 1 ) == var_3 . charAt ( var_13 - 1 ) && var_9 [ 0 ] [ var_13 - 1 ] ) {
      var_9 [ 0 ] [ var_13 ] = true ;
    }
  }
  for ( int var_10 = 1 ;
  var_10 <= var_2 . length ( ) ;
  var_10 ++ ) {
    for ( int var_13 = 1 ;
    var_13 <= var_3 . length ( ) ;
    var_13 ++ ) {
      if ( ( var_4 . charAt ( var_10 + var_13 - 1 ) == var_2 . charAt ( var_10 - 1 ) && var_9 [ var_10 - 1 ] [ var_13 ] ) || ( var_4 . charAt ( var_10 + var_13 - 1 ) == var_3 . charAt ( var_13 - 1 ) && var_9 [ var_10 ] [ var_13 - 1 ] ) ) {
        var_9 [ var_10 ] [ var_13 ] = true ;
      }
    }
  }
  return var_9 [ var_2 . length ( ) ] [ var_3 . length ( ) ] ;
}
