class Solution:
def findAnagrams(self, s: str, p: str) -> List[int]:
ans = []
if len(s) < len(p) :
return ans
det = [0 for x in range(26)]
for i in range(len(p)):
det[ord(p[i]) - ord('a')] -= 1
det[ord(s[i]) - ord('a')] += 1
abssum = 0
for nums in det:
abssum += abs(nums)
if abssum == 0:
ans.append(0)
for i in range(len(s) - len(p)):
abssum -= abs(det[ord(s[i]) - ord('a')])
abssum -= abs(det[ord(s[i + len(p) ]) - ord('a')])
det[ord(s[i]) - ord('a')] -= 1
det[ord(s[i + len(p)]) - ord('a')] += 1
abssum += abs(det[ord(s[i]) - ord('a')])
abssum += abs(det[ord(s[i + len(p)]) - ord('a')])
if abssum == 0:
ans.append(i + 1)
return ans
Time O(n). Space O(1).