题解 | #最小覆盖子串#
最小覆盖子串
https://www.nowcoder.com/practice/c466d480d20c4c7c9d322d12ca7955ac
不会窗口滑动,我直接暴力拆解的,双指针+hashMap记事本
import java.util.*; public class Solution { /** * 双指针 + 哈希 * @param S string字符串 * @param T string字符串 * @return string字符串 */ public String minWindow (String S, String T) { String minStr = ""; // 创建记事本并初始化 HashMap<Character, Integer> book = new HashMap<>(); initialBook(book, T); // 循环双指针遍历字符串S boolean flag = false; for(int i = 0, j = 0, k = 0; i <= S.length(); i++) { // 匹配到了一次 if (j >= T.length()) { String matchStr = S.substring(k, i); if (minStr.isEmpty()) minStr = matchStr; else minStr = matchStr.length() < minStr.length() ? matchStr : minStr; // 初始化i,j索引 j = 0; i = k + 1; flag = false; // 初始化记事本 initialBook(book, T); } if (i < S.length()) { char c = S.charAt(i); if (T.contains(String.valueOf(c)) && book.get(c) != 0) { // 记录匹配字符串的开头索引 if (!flag) { k = i; flag = true; } book.put(c, book.get(c) - 1); j++; } } } return minStr; } /** * 初始化记事本 * @param book * @param T */ public void initialBook(Map<Character, Integer> book, String T) { for (int i = 0; i < T.length(); i++) { book.put(T.charAt(i), book.getOrDefault(T.charAt(i), 0) + 1); } } }