Description
Given two strings s and part, perform the following operation on s until all occurrences of the substring part are removed:
- Find the leftmost occurrence of the substring 
partand remove it froms. 
Return s after removing all occurrences of part.
A substring is a contiguous sequence of characters in a string.
Β
Example 1:
Input: s = "daabcbaabcbc", part = "abc" Output: "dab" Explanation: The following operations are done: - s = "daabcbaabcbc", remove "abc" starting at index 2, so s = "dabaabcbc". - s = "dabaabcbc", remove "abc" starting at index 4, so s = "dababc". - s = "dababc", remove "abc" starting at index 3, so s = "dab". Now s has no occurrences of "abc".
Example 2:
Input: s = "axxxxyyyyb", part = "xy" Output: "ab" Explanation: The following operations are done: - s = "axxxxyyyyb", remove "xy" starting at index 4 so s = "axxxyyyb". - s = "axxxyyyb", remove "xy" starting at index 3 so s = "axxyyb". - s = "axxyyb", remove "xy" starting at index 2 so s = "axyb". - s = "axyb", remove "xy" starting at index 1 so s = "ab". Now s has no occurrences of "xy".
Β
Constraints:
1 <= s.length <= 10001 <= part.length <= 1000sββββββ andpartconsists of lowercase English letters.
Solution
Python3
class Solution:
    def removeOccurrences(self, s: str, part: str) -> str:
        queue = collections.deque()
        pn = len(part)
        
        def check():
            i = -1
            for _ in range(pn):
                if queue[i] != part[i]: return False
                i -= 1
            
            return True
        
        for x in s:
            queue.append(x)
            
            while len(queue) >= pn and check():
                for _ in range(pn):
                    queue.pop()
            
        return "".join(queue)