Find All Anagrams in a String – Python 3 (Week 12 – 01)

  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).

Leave a comment

Design a site like this with WordPress.com
Get started