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 <= 104`
*   `s1` and `s2` consist of lowercase English letters.


def checkInclusion(s1: str, s2: str) -> bool:
    if len(s1) > len(s2):
        return False

    s1_map = [0] * 26
    s2_map = [0] * 26

    for i in range(len(s1)):
        s1_map[ord(s1[i]) - ord('a')] += 1
        s2_map[ord(s2[i]) - ord('a')] += 1

    for i in range(len(s2) - len(s1)):
        if s1_map == s2_map:
            return True

        s2_map[ord(s2[i]) - ord('a')] -= 1
        s2_map[ord(s2[i + len(s1)]) - ord('a')] += 1

    return s1_map == s2_map
