permuting a string

🏠

https://leetcode.com/problems/permutation-in-string/

My solution. Basically a variation of Rabin Karp.

 1from functools import reduce
 2from string import ascii_lowercase as asc
 3
 4class Solution:
 5    def checkInclusion(self, s1: str, s2: str) -> bool:
 6        if len(s1) > len(s2):
 7            return False
 8        if len(s1) == 0:
 9            return True
10        d = {L:O for O, L in enumerate(asc)}
11        s1h = reduce(lambda a, b: a+d[b], s1, 0)
12        s2h = reduce(lambda a, b: a+d[b], s2[:len(s1)], 0)
13        for i in range(len(s2)-len(s1)+1):
14            if s1h == s2h:
15                if all(l1 in s2[i:i+len(s1)] for l1 in s1):
16                    return True
17            if i+len(s1) == len(s2):
18                break
19            s2h -= d[s2[i]]
20            s2h += d[s2[i+(len(s1))]]
21        return False
22
23# Solution().checkInclusion("ab", "eidboaoo")