题解 | 牛群名字覆盖
牛群名字覆盖
https://www.nowcoder.com/practice/e6cef4702e7841f59cf47daf9bafb241
- 最小覆盖子串问题。
- hash 的写法是精髓。
import java.util.*; class Solution { private boolean check(int[] hash) { for (int i : hash) { if (i < 0) { return false; } } return true; } public String minWindow(String s, String t) { int[] hash = new int[128]; for (int i = 0; i < t.length(); ++i) { --hash[t.charAt(i)]; } final int n = s.length(); final char[] cs = s.toCharArray(); int l = 0; int min_l = -1, min_r = -1; for (int r = 0; r < n; ++r) { ++hash[s.charAt(r)]; if (check(hash)) { while (l <= r && check(hash)) { --hash[s.charAt(l)]; ++l; } if (min_r == -1 || min_r - min_l + 1 > r - l + 2) { min_l = l - 1; min_r = r; } } } if (min_r == -1) { return ""; } return s.substring(min_l, min_r + 1); } }