diff --git a/work/Easy/Two Pointers/392.is-subsequence.py b/work/Easy/Two Pointers/392.is-subsequence.py new file mode 100644 index 0000000..0e687ca --- /dev/null +++ b/work/Easy/Two Pointers/392.is-subsequence.py @@ -0,0 +1,57 @@ +""" +392. Is Subsequence +Difficulty: Easy +https://leetcode.com/problems/is-subsequence/ + +────────────────────────────────────────────────── + +Given two strings s and t, return true if s is a subsequence of t, or +false otherwise. + +A subsequence of a string is a new string that is formed from the +original string by deleting some (can be none) of the characters +without disturbing the relative positions of the remaining characters. +(i.e., "ace" is a subsequence of "abcde" while "aec" is not). + + + +Example 1: + +Input: s = "abc", t = "ahbgdc" +Output: true + +Example 2: + +Input: s = "axc", t = "ahbgdc" +Output: false + + + +Constraints: + + • 0 <= s.length <= 100 + + • 0 <= t.length <= 10^4 + + • s and t consist only of lowercase English letters. + + + +Follow up: Suppose there are lots of incoming s, say s1, s2, ..., sk +where k >= 10^9, and you want to check one by one to see if t has its +subsequence. In this scenario, how would you change your code? +""" + + +class Solution: + def isSubsequence(self, s: str, t: str) -> bool: + if len(s) > len(t): + return False + + i, j = 0, 0 + while i < len(s) and j < len(t): + if s[i] == t[j]: + i += 1 + j += 1 + + return i == len(s) diff --git a/work/Medium/Array/11.container-with-most-water.py b/work/Medium/Array/11.container-with-most-water.py new file mode 100644 index 0000000..fa18ae5 --- /dev/null +++ b/work/Medium/Array/11.container-with-most-water.py @@ -0,0 +1,60 @@ +""" +11. Container With Most Water +Difficulty: Medium +https://leetcode.com/problems/container-with-most-water/ + +────────────────────────────────────────────────── + +You are given an integer array height of length n. There are n +vertical lines drawn such that the two endpoints of the i^th line are +(i, 0) and (i, height[i]). + +Find two lines that together with the x-axis form a container, such +that the container contains the most water. + +Return the maximum amount of water a container can store. + +Notice that you may not slant the container. + + + +Example 1: + +Input: height = [1,8,6,2,5,4,8,3,7] +Output: 49 +Explanation: The above vertical lines are represented by array +[1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue +section) the container can contain is 49. + +Example 2: + +Input: height = [1,1] +Output: 1 + + + +Constraints: + + • n == height.length + + • 2 <= n <= 10^5 + + • 0 <= height[i] <= 10^4 +""" + + +class Solution: + def maxArea(self, height: List[int]) -> int: # noqa: F821 + res = 0 + left = 0 + right = len(height) - 1 + + while left < right: + area = (right - left) * min(height[left], height[right]) + res = max(res, area) + if height[left] < height[right]: + left += 1 + else: + right -= 1 + + return res