comefrom: <gouthampradhan>dynamic_programming_InterleavingString_1.java
code: public boolean isInterleave(String s1, String s2, String s3) {
      boolean[][] DP = new boolean[s1.length() + 1][s2.length() + 1];
      DP[0][0] = true;
      if (s3.length() != (s2.length() + s1.length())) return false;
      for (int i = 0; i <= s1.length(); i++) {
        for (int j = 0; j <= s2.length(); j++) {
          if (i == 0 && j == 0) continue;
          int index = (i + j);
          if (j > 0) {
            if (s3.charAt(index - 1) == s2.charAt(j - 1) && DP[i][j - 1]) {
              DP[i][j] = true;
            }
          }
          if (i > 0) {
            if (s3.charAt(index - 1) == s1.charAt(i - 1) && DP[i - 1][j]) {
              DP[i][j] = true;
            }
          }
        }
      }
      return DP[s1.length()][s2.length()];
    }
masked: public boolean var_0 ( String var_2 , String var_3 , String var_4 ) {
    boolean [ ] [ ] var_8 = new boolean [ var_2 . length ( ) + 1 ] [ var_3 . length ( ) + 1 ] ;
    var_8 [ 0 ] [ 0 ] = true ;
    if ( var_4 . length ( ) != ( var_3 . length ( ) + var_2 . length ( ) ) ) return false ;
    for ( int var_10 = 0 ;
    var_10 <= var_2 . length ( ) ;
    var_10 ++ ) {
      for ( int var_11 = 0 ;
      var_11 <= var_3 . length ( ) ;
      var_11 ++ ) {
        if ( var_10 == 0 && var_11 == 0 ) continue ;
        int var_12 = ( var_10 + var_11 ) ;
        if ( var_11 > 0 ) {
          if ( var_4 . charAt ( var_12 - 1 ) == var_3 . charAt ( var_11 - 1 ) && var_8 [ var_10 ] [ var_11 - 1 ] ) {
            var_8 [ var_10 ] [ var_11 ] = true ;
          }
        }
        if ( var_10 > 0 ) {
          if ( var_4 . charAt ( var_12 - 1 ) == var_2 . charAt ( var_10 - 1 ) && var_8 [ var_10 - 1 ] [ var_11 ] ) {
            var_8 [ var_10 ] [ var_11 ] = true ;
          }
        }
      }
    }
    return var_8 [ var_2 . length ( ) ] [ var_3 . length ( ) ] ;
  }
  