""" 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