The Minimum Window Substring problem is a classic problem in string manipulation and is frequently encountered in coding interviews and real-world applications. In this blog, we’ll explore the problem, understand its solution, and discuss the implementation details.
Problem Statement
Given two strings s
and t
, we are tasked with finding the minimum window substring of s
such that every character in t
(including duplicates) is included in the window. If there is no such substring, we return an empty string.
For example, given:
s = "ADOBECODEBANC"
t = "ABC"
The minimum window substring containing all characters from t
is "BANC"
.
Approach
To solve this problem efficiently, we can use the sliding window technique. The idea is to maintain two pointers, left
and right
, that define the window. We move the right
pointer to expand the window until it contains all characters from t
. Then, we move the left
pointer to shrink the window while maintaining the required characters in the window. We keep track of the minimum window length and its starting index as we traverse the string s
.
Solution
Let’s take a closer look at the solution:
class Solution {
public String minWindow(String s, String t) {
int[] freq = new int[128];
for (char c : t.toCharArray()) {
freq[c]++;
}
int left = 0, right = 0;
int minLen = Integer.MAX_VALUE;
int minStart = 0;
int count = t.length();
while (right < s.length()) {
if (freq[s.charAt(right)] > 0) {
count--;
}
freq[s.charAt(right)]--;
right++;
while (count == 0) {
if (right - left < minLen) {
minLen = right - left;
minStart = left;
}
char leftChar = s.charAt(left);
freq[leftChar]++;
if (freq[leftChar] > 0) {
count++;
}
left++;
}
}
return minLen == Integer.MAX_VALUE ? "" : s.substring(minStart, minStart + minLen);
}
}
https://leetcode.com/problems/minimum-window-substring/description/