public static boolean isInterleave(String s1, String s2, String s3) {
       int m=s1.length(), n=s2.length();
       if (m+n!=s3.length())
           return false;
       boolean[][] t=new boolean[m+1][n+1];
       t[0][0]=true;
       for (int i=1;i<=m;++i)
           if (s1.charAt(i-1)==s3.charAt(i-1))
               t[i][0]=true;
           else break;
       for (int j=1;j<=n;++j)
           if (s2.charAt(j-1)==s3.charAt(j-1))
               t[0][j]=true;
           else 
               break;
       for (int i=1;i<=m;++i) {
           for (int j=1;j<=n;++j) {
               if (t[i-1][j]&&s1.charAt(i-1)==s3.charAt(i+j-1))
                   t[i][j]=true;
               if (t[i][j-1]&&s2.charAt(j-1)==s3.charAt(i+j-1))
                   t[i][j]=true;
           }
       }
       return t[m][n];
   }