今日题目

https://leetcode.com/problems/remove-all-occurrences-of-a-substring/description/

思路

本题需要删除字符串 “s” 中所有出现的子串 “part”。因此,我们可以不断检查 “s” 是否包含 “part”,若包含则将其删除,重复此操作直至不再出现为止。

方法

方法一: 使用栈来实现。遍历字符串,将字符依次压入栈中。当检测到栈顶的若干字符与 “part” 完全匹配时,将这些字符从栈中弹出。

方法二: 直接利用 Python 内置函数在原字符串 s 中查找并删除 “part”。

复杂度

  • 时间复杂度:$O(N\times M)$,N 为 s 的长度,M 为 part 的长度。

  • 空间复杂度:$O(1)$

代码

class Solution:
    def removeOccurrences(self, s: str, part: str) -> str:
        st = []
        N = len(part)
        for ch in s:
            st.append(ch)
            if len(st) >= N:
                flag = True
                for i in range(1, N + 1):
                    if st[-i] != part[-i]:
                        print(st[-i], part[-i])
                        flag = False
                        break
                
                if flag:
                    for i in range(N):
                        st.pop()
    
        return ''.join(st)

Real Python

class Solution:
    def removeOccurrences(self, s: str, part: str) -> str:
        while part in s:
            s = s.replace(part,"",1)
        return s