diff --git a/src/main/java/com/cool/hot100/substring/Num79.java b/src/main/java/com/cool/hot100/substring/Num79.java index f07d7ac..0288198 100644 --- a/src/main/java/com/cool/hot100/substring/Num79.java +++ b/src/main/java/com/cool/hot100/substring/Num79.java @@ -1,5 +1,7 @@ package com.cool.hot100.substring; +import org.junit.Test; + import java.util.*; /** @@ -9,41 +11,61 @@ import java.util.*; * @Date: 2024/09/06/13:57 * DayNumber 1 * Hard 3 - * Level ? + * Level 6 */ public class Num79 { public String minWindow(String s, String t) { - if(s.length() tMap=new HashMap<>(); - Map sMap=new HashMap<>(); - for(int i=0;i tMap = new HashMap<>(); + Map sMap = new HashMap<>(); + for (int i = 0; i < t.length(); i++) { + tMap.put(t.charAt(i), tMap.getOrDefault(t.charAt(i), 0) + 1); } - for(int i=0;isMap.get(charArray[i])){ - right++; - }else{ - while (sMap.get(charArray[left])>tMap.get(charArray[left])){ - sMap.put(charArray[left],sMap.get(charArray[left])-1); + for (int i = 0; i < charArray.length; i++) { + if (tMap.containsKey(charArray[i])) { + sMap.put(charArray[i], sMap.getOrDefault(charArray[i], 0) + 1); + if (tMap.get(charArray[i]) <= sMap.get(charArray[i]) && check(sMap, tMap)) { + while (!tMap.containsKey(charArray[left]) || sMap.getOrDefault(charArray[left], Integer.MAX_VALUE) > tMap.get(charArray[left])) { + if (tMap.containsKey(charArray[left])) { + sMap.put(charArray[left], sMap.get(charArray[left]) - 1); + } + left++; + } + if (right - left < minRight - minLeft) { + minLeft = left; + minRight = right + 1; } - left++; } } right++; } - return s.substring(left,right); + if (minRight == Integer.MAX_VALUE) { + minLeft = left; + minRight = 0; + } + return s.substring(minLeft, minRight); } + private boolean check(Map sMap, Map tMap) { + for (Map.Entry next : tMap.entrySet()) { + if (!sMap.containsKey(next.getKey()) || sMap.get(next.getKey()) < next.getValue()) { + return false; + } + } + return true; + } + + @Test + public void test() { + System.out.println(minWindow("aa", "aa")); + } }