From 0ce86e690353489fe51dc952f70ace6acdb973a4 Mon Sep 17 00:00:00 2001 From: Cool <747682928@qq.com> Date: Fri, 6 Sep 2024 23:54:54 +0800 Subject: [PATCH] =?UTF-8?q?2024/9/06=20LeetCode=20Hot100=20substring=20?= =?UTF-8?q?=E6=9C=80=E5=90=8E=E4=B8=80=E9=A2=98=E4=B9=8B=E6=88=91=E7=9A=84?= =?UTF-8?q?=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/hot100/substring/Num79.java | 66 ++++++++++++------- 1 file changed, 44 insertions(+), 22 deletions(-) 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")); + } }