diff --git a/work/1/Hard/Hash Table/76.minimum-window-substring.py b/work/1/Hard/Hash Table/76.minimum-window-substring.py new file mode 100644 index 0000000..2e7638f --- /dev/null +++ b/work/1/Hard/Hash Table/76.minimum-window-substring.py @@ -0,0 +1,56 @@ +""" +76. Minimum Window Substring +Difficulty: Hard +https://leetcode.com/problems/minimum-window-substring/ + +────────────────────────────────────────────────── + +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. + + + +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 <= 10^5 + + • s and t consist of uppercase and lowercase English letters. + + + +Follow up: Could you find an algorithm that runs in O(m + n) time? +""" + +class Solution: + def minWindow(self, s: str, t: str) -> str: + diff --git a/work/1/Hard/Math/224.basic-calculator.py b/work/1/Hard/Math/224.basic-calculator.py new file mode 100644 index 0000000..2be5e38 --- /dev/null +++ b/work/1/Hard/Math/224.basic-calculator.py @@ -0,0 +1,55 @@ +""" +224. Basic Calculator +Difficulty: Hard +https://leetcode.com/problems/basic-calculator/ + +────────────────────────────────────────────────── + +Given a string s representing a valid expression, implement a basic +calculator to evaluate it, and return the result of the evaluation. + +Note: You are not allowed to use any built-in function which +evaluates strings as mathematical expressions, such as eval(). + + + +Example 1: + +Input: s = "1 + 1" +Output: 2 + +Example 2: + +Input: s = " 2-1 + 2 " +Output: 3 + +Example 3: + +Input: s = "(1+(4+5+2)-3)+(6+8)" +Output: 23 + + + +Constraints: + + • 1 <= s.length <= 3 * 10^5 + + • s consists of digits, '+', '-', '(', ')', and ' '. + + • s represents a valid expression. + +• '+' is not used as a unary operation (i.e., "+1" and "+(2 + 3)" is +invalid). + +• '-' could be used as a unary operation (i.e., "-1" and "-(2 + 3)" +is valid). + + • There will be no two consecutive operators in the input. + +• Every number and running calculation will fit in a signed 32-bit +integer. +""" + +class Solution: + def calculate(self, s: str) -> int: + diff --git a/work/1/Medium/Stack/901.online-stock-span.py b/work/1/Medium/Stack/901.online-stock-span.py index d964851..94dade7 100644 --- a/work/1/Medium/Stack/901.online-stock-span.py +++ b/work/1/Medium/Stack/901.online-stock-span.py @@ -24,12 +24,12 @@ less than or equal 8 for 3 consecutive days. Implement the StockSpanner class: - • StockSpanner() Initializes the object of the class. + • StockSpanner() Initializes the object of the class. • int next(int price) Returns the span of the stock's price given that today's price is price. - + Example 1: @@ -52,23 +52,27 @@ stockSpanner.next(75); // return 4, because the last 4 prices price. stockSpanner.next(85); // return 6 - + Constraints: - • 1 <= price <= 10^5 + • 1 <= price <= 10^5 - • At most 10^4 calls will be made to next. + • At most 10^4 calls will be made to next. """ -class StockSpanner: +class StockSpanner: def __init__(self): - prices = [] - + self.stack = [] def next(self, price: int) -> int: - + ans = 1 + while self.stack and self.stack[-1][0] <= price: + ans += self.stack.pop()[1] + + self.stack.append([price, ans]) + return ans # Your StockSpanner object will be instantiated and called as such: