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