diff --git a/work/Medium/Hash Table/567.permutation-in-string.py b/work/Medium/Hash Table/567.permutation-in-string.py new file mode 100644 index 0000000..23b8360 --- /dev/null +++ b/work/Medium/Hash Table/567.permutation-in-string.py @@ -0,0 +1,58 @@ +""" +567. Permutation in String +Difficulty: Medium +https://leetcode.com/problems/permutation-in-string/ + +────────────────────────────────────────────────── + +Given two strings s1 and s2, return true if s2 contains a permutation +of s1, or false otherwise. + +In other words, return true if one of s1's permutations is the +substring of s2. + + + +Example 1: + +Input: s1 = "ab", s2 = "eidbaooo" +Output: true +Explanation: s2 contains one permutation of s1 ("ba"). + +Example 2: + +Input: s1 = "ab", s2 = "eidboaoo" +Output: false + + + +Constraints: + + • 1 <= s1.length, s2.length <= 10^4 + + • s1 and s2 consist of lowercase English letters. +""" + +from collections import Counter + + +class Solution: + def checkInclusion(self, s1: str, s2: str) -> bool: + k = len(s1) + if k > len(s2): + return False + + need = Counter(s1) + window = Counter() + + for right, c in enumerate(s2): + window[c] += 1 + if right >= k: + left_char = s2[right - k] + window[left_char] -= 1 + if window[left_char] == 0: + del window[left_char] + if window == need: + return True + + return False