minimum-window-substring py3 brute force
This commit is contained in:
parent
0e1f96d20b
commit
930aa7cee8
38
0076_minimum-window-substring/README.md
Normal file
38
0076_minimum-window-substring/README.md
Normal 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
|
42
0076_minimum-window-substring/python3/brute_force_tle.py
Normal file
42
0076_minimum-window-substring/python3/brute_force_tle.py
Normal 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
|
0
0076_minimum-window-substring/python3/solution.py
Normal file
0
0076_minimum-window-substring/python3/solution.py
Normal file
Loading…
Reference in New Issue
Block a user