public String minWindow(String S, String T) {
int m = T.length(), n = S.length();
int[][] dp = new int[m][n];
for (int j = 0; j < n; j++) {
dp[0][j] = T.charAt(0) == S.charAt(j) ? j : -1;
for (int i = 1; i < m; i++) {
for (int i = 1; i < m; i++) {
for (int j = 0; j < n; j++) {
if (startIndex != -1 && T.charAt(i) == S.charAt(j)) {
if (dp[i - 1][j] != -1) {
startIndex = dp[i - 1][j];
for (int j = 0; j < n; j++) {
if (dp[m - 1][j] != -1) {
if (j - dp[m - 1][j] + 1 < minLen) {
minLen = j - dp[m - 1][j] + 1;
return start == -1 ? "" : S.substring(start, start + minLen);