package 第03期.mca_09; // 给你一个字符串 s 、一个字符串 t // 返回 s 中涵盖 t 所有字符的最小子串 // 如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 // 注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量 // 如果 s 中存在这样的子串,我们保证它是唯一的答案 // 测试链接 : https://leetcode.cn/problems/minimum-window-substring/ public class Code03_MinWindowLength { public static String minWindow(String s, String t) { if (s.length() < t.length()) { return ""; } char[] str = s.toCharArray(); char[] target = t.toCharArray(); int[] map = new int[256]; for (char cha : target) { map[cha]++; } int all = target.length; int L = 0; int R = 0; int minLen = Integer.MAX_VALUE; int ansl = -1; int ansr = -1; while (R != str.length) { map[str[R]]--; if (map[str[R]] >= 0) { all--; } if (all == 0) { while (map[str[L]] < 0) { map[str[L++]]++; } if (minLen > R - L + 1) { minLen = R - L + 1; ansl = L; ansr = R; } all++; map[str[L++]]++; } R++; } return minLen == Integer.MAX_VALUE ? "" : s.substring(ansl, ansr + 1); } }