class SlideWindow {
public static void main(String[] a) {
int[] arr = {100, 200, 300, 400};
int k = 2;
int maxSum = maxSum(arr, k);

    System.out.println(maxSum);

    String S = "ADOBECODEBANC";

    String T = "ABC";

    String findedSubStr = findShortestSubStringContainTStr(S, T);

    System.out.println(findedSubStr);


}

private static String findShortestSubStringContainTStr(String s, String t) {
    char[] sChars = s.toCharArray();
    char[] tChars = t.toCharArray();
    int sLen = sChars.length;

    int left = 0;
    int right = 0;
    int start = 0;
    int end = 0;
    int minWidth = Integer.MAX_VALUE;
    int tempWidth = 0;

    right = left + 1;
    String subStr;

    while (right <= sLen) {

        subStr = s.substring(left, right);
        //如果窗口不包含目标子串的所有字母,则向右扩宽窗口
        if (contrainsAll(subStr, t)) {
            //如果窗口内已包含目标子串的所有字母,则记录此时的start,end位置
            tempWidth = right - left;
            if (tempWidth < minWidth) {
                minWidth = tempWidth;
                start = left;
                end = right;
            }

            //尝试从左侧缩小窗口
            //从左侧缩小一位
            left = left + 1;
            while (left < right) {
                subStr = s.substring(left, right);

                if (contrainsAll(subStr, t)) {
                    //更新起始位置
                    tempWidth = right - left;
                    if (tempWidth < minWidth) {
                        minWidth = tempWidth;
                        start = left;
                        end = right;
                    }
                    left++;
                } else {
                    break;
                }
            }
        }
        right++;
    }
    return s.substring(start, end);
}

private static boolean contrainsAll(String s, String t) {
    char[] tChars = t.toCharArray();
    for (int i = 0; i < tChars.length; i++) {
        String temp = String.valueOf(tChars[i]);
        if (!s.contains(temp)) {
            return false;
        }
    }
    return true;
}

private static int maxSum(int[] arr, int k) {
    int len = arr.length;
    int max = 0;
    for (int i = 0; i < k; i++) {
        max += arr[i];
    }

    for (int j = 0; j < len - k; j++) {
        int temp = max - arr[j] + arr[j + k];
        max = max > temp ? max : temp;
    }

    return max;
}

}