minimum-window-substring py3 brute force

This commit is contained in:
Sangeeth Sudheer 2022-04-25 01:44:46 +05:30
parent 0e1f96d20b
commit 930aa7cee8
3 changed files with 80 additions and 0 deletions

View File

@ -0,0 +1,38 @@
Given two strings `s` and `t` of lengths `m` and `n` respectively, return _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__, return the empty string_ `""`_._
The testcases will be generated such that the answer is **unique**.
A **substring** is a contiguous sequence of characters within the string.
**Example 1:**
Input: s = "ADOBECODEBANC", t = "ABC"
Output: "BANC"
Explanation: The minimum window substring "BANC" includes 'A', 'B', and 'C' from string t.
**Example 2:**
Input: s = "a", t = "a"
Output: "a"
Explanation: The entire string s is the minimum window.
**Example 3:**
Input: s = "a", t = "aa"
Output: ""
Explanation: Both 'a's from t must be included in the window.
Since the largest window of s only has one 'a', return empty string.
**Constraints:**
* `m == s.length`
* `n == t.length`
* `1 <= m, n <= 105`
* `s` and `t` consist of uppercase and lowercase English letters.
**Follow up:** Could you find an algorithm that runs in `O(m + n)` time?
https://leetcode.com/problems/minimum-window-substring

View File

@ -0,0 +1,42 @@
from collections import Counter
class Solution:
def minWindow(self, s: str, t: str) -> str:
tcounts = Counter(t)
# If chars of t is not included in the entire
# s string, then we can just return right away
if not tcounts <= Counter(s):
return ""
tlen = len(t)
min_window = ""
for start in range(len(s)):
end = start + tlen - 1
# We can all the substrings starting from `start` which is every
# letter of s
while end < len(s):
curr_window = s[start:end + 1]
curr_window_counts = Counter(curr_window)
# <= is overloaded for Counters to mean inclusion
#
# i.e, counter_a -is-included-in- counter_b
#
if tcounts <= curr_window_counts:
# If no min_window has been computed yet or if current
# window is shorter, then we assign that as the new
# min_window
if min_window == "" or len(curr_window) < len(min_window):
min_window = curr_window
# Since at this point, if we keep iterating in the inner loop,
# we'll only get longer substrings so we just break and proceed
# to find the substrings starting from the next letter (start + 1)
break
end += 1
return min_window