diff --git a/apps/docs/content/(hash-table)/567-permutation-in-string.mdx b/apps/docs/content/(hash-table)/567-permutation-in-string.mdx new file mode 100644 index 0000000..3483848 --- /dev/null +++ b/apps/docs/content/(hash-table)/567-permutation-in-string.mdx @@ -0,0 +1,51 @@ +--- +title: '567. Permutation in String' +description: Given two strings s1 and s2, return true if s2 contains a permutation of s1, or false otherwise +sidebar: + label: 'Permutation in String' + badge: 'Medium' +--- + +Sliding Window + +### 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. + +## Solution + +```py +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 +```