From 6d8d82e23cd22f93c069893a7b88c80a7bd40ce4 Mon Sep 17 00:00:00 2001 From: Anubhav <110095813+Anubhav-pandey004@users.noreply.github.com> Date: Mon, 29 Sep 2025 18:17:02 +0530 Subject: [PATCH 01/11] Create MinimumWindowSubstring.java --- .../slidingwindow/MinimumWindowSubstring.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/main/java/com/thealgorithms/slidingwindow/MinimumWindowSubstring.java diff --git a/src/main/java/com/thealgorithms/slidingwindow/MinimumWindowSubstring.java b/src/main/java/com/thealgorithms/slidingwindow/MinimumWindowSubstring.java new file mode 100644 index 000000000000..c1a5ac067ab5 --- /dev/null +++ b/src/main/java/com/thealgorithms/slidingwindow/MinimumWindowSubstring.java @@ -0,0 +1,69 @@ +package com.thealgorithms.slidingwindow; + +import java.util.HashMap; + +/** + * Finds the minimum window substring in 's' that contains all characters of 't'. + * + * Worst-case performance O(n) + * Best-case performance O(n) + * Average performance O(n) + * Worst-case space complexity O(1) + * + * @author https://github.com/Chiefpatwal + */ +public final class MinimumWindowSubstring { + // Prevent instantiation + private MinimumWindowSubstring() { + } + + /** + * Finds the minimum window substring of 's' containing all characters of 't'. + * + * @param s The input string to search within. + * @param t The string with required characters. + * @return The minimum window substring, or empty string if not found. + */ + public static String minWindow(String s, String t) { + if (s.length() < t.length()) { + return ""; + } + + HashMap tFreq = new HashMap<>(); + for (char c : t.toCharArray()) { + tFreq.put(c, tFreq.getOrDefault(c, 0) + 1); + } + + HashMap windowFreq = new HashMap<>(); + int left = 0; + int right = 0; + int minLen = Integer.MAX_VALUE; + int count = 0; + String result = ""; + + while (right < s.length()) { + char c = s.charAt(right); + windowFreq.put(c, windowFreq.getOrDefault(c, 0) + 1); + + if (tFreq.containsKey(c) && windowFreq.get(c).intValue() <= tFreq.get(c).intValue()) { + count++; + } + + while (count == t.length()) { + if (right - left + 1 < minLen) { + minLen = right - left + 1; + result = s.substring(left, right + 1); + } + + char leftChar = s.charAt(left); + windowFreq.put(leftChar, windowFreq.get(leftChar) - 1); + if (tFreq.containsKey(leftChar) && windowFreq.get(leftChar) < tFreq.get(leftChar)) { + count--; + } + left++; + } + right++; + } + return result; + } +} From 334d6a8f2e6e4ee007f8057319e8c23b823a0ae7 Mon Sep 17 00:00:00 2001 From: Anubhav <110095813+Anubhav-pandey004@users.noreply.github.com> Date: Mon, 29 Sep 2025 18:19:12 +0530 Subject: [PATCH 02/11] Create MinimumWindowSubstringTest.java --- .../MinimumWindowSubstringTest.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java diff --git a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java new file mode 100644 index 000000000000..e003dfcc264a --- /dev/null +++ b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java @@ -0,0 +1,23 @@ +package com.thealgorithms.slidingwindow; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +/** + * Unit tests for the MinimumWindowSubstring class. + * + * @author (https://github.com/Chiefpatwal) + */ +public class MinimumWindowSubstringTest { + + /** + * Tests for MinimumWindowSubstring.minWindow. + */ + @Test + public void testMinimumWindowSubstring() { + assertEquals(4, MinimumWindowSubstring.minWindow("ADOBECODEBANC", "ABC")); // "BANC" + assertEquals(1, MinimumWindowSubstring.minWindow("a", "a")); // "a" + assertEquals(0, MinimumWindowSubstring.minWindow("a", "aa")); // "" + } +} From 3a553e83ef2dd98dd47b2b8e31e85e247c80e67c Mon Sep 17 00:00:00 2001 From: Anubhav <110095813+Anubhav-pandey004@users.noreply.github.com> Date: Mon, 29 Sep 2025 18:24:19 +0530 Subject: [PATCH 03/11] correct MinimumWindowSubstringTest.java --- .../slidingwindow/MinimumWindowSubstringTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java index e003dfcc264a..905b8d8e29b3 100644 --- a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java +++ b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java @@ -16,8 +16,8 @@ public class MinimumWindowSubstringTest { */ @Test public void testMinimumWindowSubstring() { - assertEquals(4, MinimumWindowSubstring.minWindow("ADOBECODEBANC", "ABC")); // "BANC" - assertEquals(1, MinimumWindowSubstring.minWindow("a", "a")); // "a" - assertEquals(0, MinimumWindowSubstring.minWindow("a", "aa")); // "" + assertEquals("BANC", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "ABC")); // "BANC" + assertEquals("a", MinimumWindowSubstring.minWindow("a", "a")); // "a" + assertEquals("", MinimumWindowSubstring.minWindow("a", "aa")); // "" } } From de3e1d796e074d4e6577da024ce00518e70a9a77 Mon Sep 17 00:00:00 2001 From: Anubhav <110095813+Anubhav-pandey004@users.noreply.github.com> Date: Thu, 2 Oct 2025 09:41:45 +0530 Subject: [PATCH 04/11] Added more test cases --- .../slidingwindow/MinimumWindowSubstringTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java index 905b8d8e29b3..a4881fa1fccb 100644 --- a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java +++ b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java @@ -19,5 +19,13 @@ public void testMinimumWindowSubstring() { assertEquals("BANC", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "ABC")); // "BANC" assertEquals("a", MinimumWindowSubstring.minWindow("a", "a")); // "a" assertEquals("", MinimumWindowSubstring.minWindow("a", "aa")); // "" + assertEquals("", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "XYZ")); + assertEquals("BC", MinimumWindowSubstring.minWindow("ABCDEF", "BC")); + assertEquals("CODE", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "CODE")); + assertEquals("q", MinimumWindowSubstring.minWindow("abcdefghijklmnopqrstuvwxyz", "q")); + assertEquals("JQTUHzRLPPyjllmvqopolorblqrijdpytjzxxvnyqihohrszawlvetnrgcnrknuandawlfzthoeoeiqsxliroreemjvqfzuimacidfymmpyljzxtwatvqszhtsjsmpgzjozxvcygidhsunqtvlbvamafbjmplrbrehjmvvlxyluuaqgbrmfxrygeylkzlflbfcwqnemigwhrrshdqiwvifoifxsaxfyqnibcwrkffbtjqxjubgrfvexqhocdvyyavdmujnfwwecqkantiaogsrgvwtwwkcczydpevynzvirsppgrdmfhbdtczprkrrvxxlxjcvauaharesmqjxhjwmrrtspsbobgofrnvdzbwiibqhrrqbtxyspnszwpxbqrwtavsmhhqrqkjegvhbeftfbicnhamhwyonlwlzysocyzshhyknbdkelplkkvazqpnzhydraoyiodssA", MinimumWindowSubstring.minWindow("HRULTrctorlsshmgtarxadgosylsmxsorskzqfdkujoJQTUHzRLPPyjllmvqopolorblqrijdpytjzxxvnyqihohrszawlvetnrgcnrknuandawlfzthoeoeiqsxliroreemjvqfzuimacidfymmpyljzxtwatvqszhtsjsmpgzjozxvcygidhsunqtvlbvamafbjmplrbrehjmvvlxyluuaqgbrmfxrygeylkzlflbfcwqnemigwhrrshdqiwvifoifxsaxfyqnibcwrkffbtjqxjubgrfvexqhocdvyyavdmujnfwwecqkantiaogsrgvwtwwkcczydpevynzvirsppgrdmfhbdtczprkrrvxxlxjcvauaharesmqjxhjwmrrtspsbobgofrnvdzbwiibqhrrqbtxyspnszwpxbqrwtavsmhhqrqkjegvhbeftfbicnhamhwyonlwlzysocyzshhyknbdkelplkkvazqpnzhydraoyiodssA", "HRULTPQPJA")); + assertEquals("", MinimumWindowSubstring.minWindow("zzzzzzzzz", "zzzzzzzzzz")); + assertEquals("ABCDEFAAAllBBBBllZ", MinimumWindowSubstring.minWindow("ABCllBBBBBlllllllABCDEFAAAllBBBBllZ", "ABAAACDEFZ")); + assertEquals("abbbbbcdd", MinimumWindowSubstring.minWindow("aaaaaaaaaaaabbbbbcdd", "abcdd")); } } From a1f5e40b5145f80d0abd885644cc10e6ee8db314 Mon Sep 17 00:00:00 2001 From: Anubhav <110095813+Anubhav-pandey004@users.noreply.github.com> Date: Thu, 2 Oct 2025 09:44:38 +0530 Subject: [PATCH 05/11] Update MinimumWindowSubstringTest.java --- .../thealgorithms/slidingwindow/MinimumWindowSubstringTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java index a4881fa1fccb..842a2dd47050 100644 --- a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java +++ b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java @@ -21,7 +21,7 @@ public void testMinimumWindowSubstring() { assertEquals("", MinimumWindowSubstring.minWindow("a", "aa")); // "" assertEquals("", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "XYZ")); assertEquals("BC", MinimumWindowSubstring.minWindow("ABCDEF", "BC")); - assertEquals("CODE", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "CODE")); + assertEquals("ECOD", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "CODE")); assertEquals("q", MinimumWindowSubstring.minWindow("abcdefghijklmnopqrstuvwxyz", "q")); assertEquals("JQTUHzRLPPyjllmvqopolorblqrijdpytjzxxvnyqihohrszawlvetnrgcnrknuandawlfzthoeoeiqsxliroreemjvqfzuimacidfymmpyljzxtwatvqszhtsjsmpgzjozxvcygidhsunqtvlbvamafbjmplrbrehjmvvlxyluuaqgbrmfxrygeylkzlflbfcwqnemigwhrrshdqiwvifoifxsaxfyqnibcwrkffbtjqxjubgrfvexqhocdvyyavdmujnfwwecqkantiaogsrgvwtwwkcczydpevynzvirsppgrdmfhbdtczprkrrvxxlxjcvauaharesmqjxhjwmrrtspsbobgofrnvdzbwiibqhrrqbtxyspnszwpxbqrwtavsmhhqrqkjegvhbeftfbicnhamhwyonlwlzysocyzshhyknbdkelplkkvazqpnzhydraoyiodssA", MinimumWindowSubstring.minWindow("HRULTrctorlsshmgtarxadgosylsmxsorskzqfdkujoJQTUHzRLPPyjllmvqopolorblqrijdpytjzxxvnyqihohrszawlvetnrgcnrknuandawlfzthoeoeiqsxliroreemjvqfzuimacidfymmpyljzxtwatvqszhtsjsmpgzjozxvcygidhsunqtvlbvamafbjmplrbrehjmvvlxyluuaqgbrmfxrygeylkzlflbfcwqnemigwhrrshdqiwvifoifxsaxfyqnibcwrkffbtjqxjubgrfvexqhocdvyyavdmujnfwwecqkantiaogsrgvwtwwkcczydpevynzvirsppgrdmfhbdtczprkrrvxxlxjcvauaharesmqjxhjwmrrtspsbobgofrnvdzbwiibqhrrqbtxyspnszwpxbqrwtavsmhhqrqkjegvhbeftfbicnhamhwyonlwlzysocyzshhyknbdkelplkkvazqpnzhydraoyiodssA", "HRULTPQPJA")); assertEquals("", MinimumWindowSubstring.minWindow("zzzzzzzzz", "zzzzzzzzzz")); From e3ceeb25ee0594921dccbcbc7a5b5b3f635e3a64 Mon Sep 17 00:00:00 2001 From: Anubhav <110095813+Anubhav-pandey004@users.noreply.github.com> Date: Thu, 2 Oct 2025 09:49:03 +0530 Subject: [PATCH 06/11] Update MinimumWindowSubstringTest.java --- .../thealgorithms/slidingwindow/MinimumWindowSubstringTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java index 842a2dd47050..5892cf087bde 100644 --- a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java +++ b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java @@ -21,7 +21,7 @@ public void testMinimumWindowSubstring() { assertEquals("", MinimumWindowSubstring.minWindow("a", "aa")); // "" assertEquals("", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "XYZ")); assertEquals("BC", MinimumWindowSubstring.minWindow("ABCDEF", "BC")); - assertEquals("ECOD", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "CODE")); + assertEquals("COD", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "COD")); assertEquals("q", MinimumWindowSubstring.minWindow("abcdefghijklmnopqrstuvwxyz", "q")); assertEquals("JQTUHzRLPPyjllmvqopolorblqrijdpytjzxxvnyqihohrszawlvetnrgcnrknuandawlfzthoeoeiqsxliroreemjvqfzuimacidfymmpyljzxtwatvqszhtsjsmpgzjozxvcygidhsunqtvlbvamafbjmplrbrehjmvvlxyluuaqgbrmfxrygeylkzlflbfcwqnemigwhrrshdqiwvifoifxsaxfyqnibcwrkffbtjqxjubgrfvexqhocdvyyavdmujnfwwecqkantiaogsrgvwtwwkcczydpevynzvirsppgrdmfhbdtczprkrrvxxlxjcvauaharesmqjxhjwmrrtspsbobgofrnvdzbwiibqhrrqbtxyspnszwpxbqrwtavsmhhqrqkjegvhbeftfbicnhamhwyonlwlzysocyzshhyknbdkelplkkvazqpnzhydraoyiodssA", MinimumWindowSubstring.minWindow("HRULTrctorlsshmgtarxadgosylsmxsorskzqfdkujoJQTUHzRLPPyjllmvqopolorblqrijdpytjzxxvnyqihohrszawlvetnrgcnrknuandawlfzthoeoeiqsxliroreemjvqfzuimacidfymmpyljzxtwatvqszhtsjsmpgzjozxvcygidhsunqtvlbvamafbjmplrbrehjmvvlxyluuaqgbrmfxrygeylkzlflbfcwqnemigwhrrshdqiwvifoifxsaxfyqnibcwrkffbtjqxjubgrfvexqhocdvyyavdmujnfwwecqkantiaogsrgvwtwwkcczydpevynzvirsppgrdmfhbdtczprkrrvxxlxjcvauaharesmqjxhjwmrrtspsbobgofrnvdzbwiibqhrrqbtxyspnszwpxbqrwtavsmhhqrqkjegvhbeftfbicnhamhwyonlwlzysocyzshhyknbdkelplkkvazqpnzhydraoyiodssA", "HRULTPQPJA")); assertEquals("", MinimumWindowSubstring.minWindow("zzzzzzzzz", "zzzzzzzzzz")); From daf3579d9b638ea838d407f9545b3cfe454490c8 Mon Sep 17 00:00:00 2001 From: Anubhav <110095813+Anubhav-pandey004@users.noreply.github.com> Date: Thu, 2 Oct 2025 09:53:08 +0530 Subject: [PATCH 07/11] Update MinimumWindowSubstringTest.java --- .../thealgorithms/slidingwindow/MinimumWindowSubstringTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java index 5892cf087bde..4adf8aa84ec5 100644 --- a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java +++ b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java @@ -21,7 +21,6 @@ public void testMinimumWindowSubstring() { assertEquals("", MinimumWindowSubstring.minWindow("a", "aa")); // "" assertEquals("", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "XYZ")); assertEquals("BC", MinimumWindowSubstring.minWindow("ABCDEF", "BC")); - assertEquals("COD", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "COD")); assertEquals("q", MinimumWindowSubstring.minWindow("abcdefghijklmnopqrstuvwxyz", "q")); assertEquals("JQTUHzRLPPyjllmvqopolorblqrijdpytjzxxvnyqihohrszawlvetnrgcnrknuandawlfzthoeoeiqsxliroreemjvqfzuimacidfymmpyljzxtwatvqszhtsjsmpgzjozxvcygidhsunqtvlbvamafbjmplrbrehjmvvlxyluuaqgbrmfxrygeylkzlflbfcwqnemigwhrrshdqiwvifoifxsaxfyqnibcwrkffbtjqxjubgrfvexqhocdvyyavdmujnfwwecqkantiaogsrgvwtwwkcczydpevynzvirsppgrdmfhbdtczprkrrvxxlxjcvauaharesmqjxhjwmrrtspsbobgofrnvdzbwiibqhrrqbtxyspnszwpxbqrwtavsmhhqrqkjegvhbeftfbicnhamhwyonlwlzysocyzshhyknbdkelplkkvazqpnzhydraoyiodssA", MinimumWindowSubstring.minWindow("HRULTrctorlsshmgtarxadgosylsmxsorskzqfdkujoJQTUHzRLPPyjllmvqopolorblqrijdpytjzxxvnyqihohrszawlvetnrgcnrknuandawlfzthoeoeiqsxliroreemjvqfzuimacidfymmpyljzxtwatvqszhtsjsmpgzjozxvcygidhsunqtvlbvamafbjmplrbrehjmvvlxyluuaqgbrmfxrygeylkzlflbfcwqnemigwhrrshdqiwvifoifxsaxfyqnibcwrkffbtjqxjubgrfvexqhocdvyyavdmujnfwwecqkantiaogsrgvwtwwkcczydpevynzvirsppgrdmfhbdtczprkrrvxxlxjcvauaharesmqjxhjwmrrtspsbobgofrnvdzbwiibqhrrqbtxyspnszwpxbqrwtavsmhhqrqkjegvhbeftfbicnhamhwyonlwlzysocyzshhyknbdkelplkkvazqpnzhydraoyiodssA", "HRULTPQPJA")); assertEquals("", MinimumWindowSubstring.minWindow("zzzzzzzzz", "zzzzzzzzzz")); From cb2838f4745ff0352a41dee772f81145a82a6e7e Mon Sep 17 00:00:00 2001 From: Anubhav <110095813+Anubhav-pandey004@users.noreply.github.com> Date: Thu, 2 Oct 2025 09:56:09 +0530 Subject: [PATCH 08/11] Update MinimumWindowSubstringTest.java --- .../slidingwindow/MinimumWindowSubstringTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java index 4adf8aa84ec5..2b3aa55c0ff1 100644 --- a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java +++ b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java @@ -22,9 +22,11 @@ public void testMinimumWindowSubstring() { assertEquals("", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "XYZ")); assertEquals("BC", MinimumWindowSubstring.minWindow("ABCDEF", "BC")); assertEquals("q", MinimumWindowSubstring.minWindow("abcdefghijklmnopqrstuvwxyz", "q")); - assertEquals("JQTUHzRLPPyjllmvqopolorblqrijdpytjzxxvnyqihohrszawlvetnrgcnrknuandawlfzthoeoeiqsxliroreemjvqfzuimacidfymmpyljzxtwatvqszhtsjsmpgzjozxvcygidhsunqtvlbvamafbjmplrbrehjmvvlxyluuaqgbrmfxrygeylkzlflbfcwqnemigwhrrshdqiwvifoifxsaxfyqnibcwrkffbtjqxjubgrfvexqhocdvyyavdmujnfwwecqkantiaogsrgvwtwwkcczydpevynzvirsppgrdmfhbdtczprkrrvxxlxjcvauaharesmqjxhjwmrrtspsbobgofrnvdzbwiibqhrrqbtxyspnszwpxbqrwtavsmhhqrqkjegvhbeftfbicnhamhwyonlwlzysocyzshhyknbdkelplkkvazqpnzhydraoyiodssA", MinimumWindowSubstring.minWindow("HRULTrctorlsshmgtarxadgosylsmxsorskzqfdkujoJQTUHzRLPPyjllmvqopolorblqrijdpytjzxxvnyqihohrszawlvetnrgcnrknuandawlfzthoeoeiqsxliroreemjvqfzuimacidfymmpyljzxtwatvqszhtsjsmpgzjozxvcygidhsunqtvlbvamafbjmplrbrehjmvvlxyluuaqgbrmfxrygeylkzlflbfcwqnemigwhrrshdqiwvifoifxsaxfyqnibcwrkffbtjqxjubgrfvexqhocdvyyavdmujnfwwecqkantiaogsrgvwtwwkcczydpevynzvirsppgrdmfhbdtczprkrrvxxlxjcvauaharesmqjxhjwmrrtspsbobgofrnvdzbwiibqhrrqbtxyspnszwpxbqrwtavsmhhqrqkjegvhbeftfbicnhamhwyonlwlzysocyzshhyknbdkelplkkvazqpnzhydraoyiodssA", "HRULTPQPJA")); assertEquals("", MinimumWindowSubstring.minWindow("zzzzzzzzz", "zzzzzzzzzz")); assertEquals("ABCDEFAAAllBBBBllZ", MinimumWindowSubstring.minWindow("ABCllBBBBBlllllllABCDEFAAAllBBBBllZ", "ABAAACDEFZ")); assertEquals("abbbbbcdd", MinimumWindowSubstring.minWindow("aaaaaaaaaaaabbbbbcdd", "abcdd")); + assertEquals("ABCDEFG", MinimumWindowSubstring.minWindow("ABCDEFG", "ABCDEFG")); + assertEquals("", MinimumWindowSubstring.minWindow("abc", "A")); + assertEquals("A", MinimumWindowSubstring.minWindow("aAbBcC", "A")); } } From 455a6ed77023e06d0f5849a5a48829e869ee6a99 Mon Sep 17 00:00:00 2001 From: Anubhav <110095813+Anubhav-pandey004@users.noreply.github.com> Date: Thu, 2 Oct 2025 09:59:16 +0530 Subject: [PATCH 09/11] Update MinimumWindowSubstringTest.java --- .../thealgorithms/slidingwindow/MinimumWindowSubstringTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java index 2b3aa55c0ff1..413f53dd986f 100644 --- a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java +++ b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java @@ -23,7 +23,6 @@ public void testMinimumWindowSubstring() { assertEquals("BC", MinimumWindowSubstring.minWindow("ABCDEF", "BC")); assertEquals("q", MinimumWindowSubstring.minWindow("abcdefghijklmnopqrstuvwxyz", "q")); assertEquals("", MinimumWindowSubstring.minWindow("zzzzzzzzz", "zzzzzzzzzz")); - assertEquals("ABCDEFAAAllBBBBllZ", MinimumWindowSubstring.minWindow("ABCllBBBBBlllllllABCDEFAAAllBBBBllZ", "ABAAACDEFZ")); assertEquals("abbbbbcdd", MinimumWindowSubstring.minWindow("aaaaaaaaaaaabbbbbcdd", "abcdd")); assertEquals("ABCDEFG", MinimumWindowSubstring.minWindow("ABCDEFG", "ABCDEFG")); assertEquals("", MinimumWindowSubstring.minWindow("abc", "A")); From b2bf70bb1c3458a52a4ab65c083041881ed14b2c Mon Sep 17 00:00:00 2001 From: Anubhav <110095813+Anubhav-pandey004@users.noreply.github.com> Date: Thu, 2 Oct 2025 10:03:58 +0530 Subject: [PATCH 10/11] Update MinimumWindowSubstringTest.java --- .../MinimumWindowSubstringTest.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java index 413f53dd986f..cd40fc3f724d 100644 --- a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java +++ b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java @@ -5,8 +5,11 @@ import org.junit.jupiter.api.Test; /** - * Unit tests for the MinimumWindowSubstring class. + * Finds the minimum window substring in {@code s} that contains all characters of {@code t}. * + * @param s The input string to search within + * @param t The string with required characters + * @return The minimum window substring, or empty string if not found * @author (https://github.com/Chiefpatwal) */ public class MinimumWindowSubstringTest { @@ -16,16 +19,16 @@ public class MinimumWindowSubstringTest { */ @Test public void testMinimumWindowSubstring() { - assertEquals("BANC", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "ABC")); // "BANC" - assertEquals("a", MinimumWindowSubstring.minWindow("a", "a")); // "a" - assertEquals("", MinimumWindowSubstring.minWindow("a", "aa")); // "" - assertEquals("", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "XYZ")); + assertEquals("BANC", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "ABC")); + assertEquals("a", MinimumWindowSubstring.minWindow("a", "a")); + assertEquals("", MinimumWindowSubstring.minWindow("a", "aa")); + assertEquals("", MinimumWindowSubstring.minWindow("ADOBECODEBANC", "XYZ")); assertEquals("BC", MinimumWindowSubstring.minWindow("ABCDEF", "BC")); assertEquals("q", MinimumWindowSubstring.minWindow("abcdefghijklmnopqrstuvwxyz", "q")); - assertEquals("", MinimumWindowSubstring.minWindow("zzzzzzzzz", "zzzzzzzzzz")); - assertEquals("abbbbbcdd", MinimumWindowSubstring.minWindow("aaaaaaaaaaaabbbbbcdd", "abcdd")); + assertEquals("", MinimumWindowSubstring.minWindow("zzzzzzzzz", "zzzzzzzzzz")); + assertEquals("abbbbbcdd", MinimumWindowSubstring.minWindow("aaaaaaaaaaaabbbbbcdd", "abcdd")); assertEquals("ABCDEFG", MinimumWindowSubstring.minWindow("ABCDEFG", "ABCDEFG")); - assertEquals("", MinimumWindowSubstring.minWindow("abc", "A")); - assertEquals("A", MinimumWindowSubstring.minWindow("aAbBcC", "A")); + assertEquals("", MinimumWindowSubstring.minWindow("abc", "A")); + assertEquals("A", MinimumWindowSubstring.minWindow("aAbBcC", "A")); } } From 5fb086b6cd0a3a26d2db12d7752e6ad6b39d28b9 Mon Sep 17 00:00:00 2001 From: Anubhav <110095813+Anubhav-pandey004@users.noreply.github.com> Date: Thu, 2 Oct 2025 15:31:09 +0530 Subject: [PATCH 11/11] Added test case "AAABBC" "AABC" --- .../thealgorithms/slidingwindow/MinimumWindowSubstringTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java index cd40fc3f724d..2c1534f4bfe6 100644 --- a/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java +++ b/src/test/java/com/thealgorithms/slidingwindow/MinimumWindowSubstringTest.java @@ -30,5 +30,6 @@ public void testMinimumWindowSubstring() { assertEquals("ABCDEFG", MinimumWindowSubstring.minWindow("ABCDEFG", "ABCDEFG")); assertEquals("", MinimumWindowSubstring.minWindow("abc", "A")); assertEquals("A", MinimumWindowSubstring.minWindow("aAbBcC", "A")); + assertEquals("AABBC", MinimumWindowSubstring.minWindow("AAABBC", "AABC")); } }