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