5781.删除一个字符串中所有出现的给定子字符串 有趣的三种解法!

简介: 5781.删除一个字符串中所有出现的给定子字符串 有趣的三种解法!

5781.删除一个字符串中所有出现的给定子字符串


https://leetcode-cn.com/problems/remove-all-occurrences-of-a-substring/solution/5781shan-chu-yi-ge-zi-fu-chuan-zhong-suo-agj2/

难度:中等


题目

给你两个字符串 s 和 part ,请你对 s 反复执行以下操作直到 所有 子字符串 part 都被删除:

找到 s 中 最左边 的子字符串 part ,并将它从 s 中删除。 请你返回从 s 中删除所有 part 子字符串以后得到的剩余字符串。

一个 子字符串 是一个字符串中连续的字符序列。

提示:

  • 1 <= s.length <= 1000
  • 1 <= part.length <= 1000
  • s 和 part 只包小写英文字母。


示例

示例 1:
输入:s = "daabcbaabcbc", part = "abc"
输出:"dab"
解释:以下操作按顺序执行:
- s = "daabcbaabcbc" ,删除下标从 2 开始的 "abc" ,得到 s = "dabaabcbc" 。
- s = "dabaabcbc" ,删除下标从 4 开始的 "abc" ,得到 s = "dababc" 。
- s = "dababc" ,删除下标从 3 开始的 "abc" ,得到 s = "dab" 。
此时 s 中不再含有子字符串 "abc" 。
示例 2:
输入:s = "axxxxyyyyb", part = "xy"
输出:"ab"
解释:以下操作按顺序执行:
- s = "axxxxyyyyb" ,删除下标从 4 开始的 "xy" ,得到 s = "axxxyyyb" 。
- s = "axxxyyyb" ,删除下标从 3 开始的 "xy" ,得到 s = "axxyyb" 。
- s = "axxyyb" ,删除下标从 2 开始的 "xy" ,得到 s = "axyb" 。
- s = "axyb" ,删除下标从 1 开始的 "xy" ,得到 s = "ab" 。
此时 s 中不再含有子字符串 "xy" 。


分析

作为中等题,这道不是很难,做过类似的括号匹配等同类型题目,立刻就能想到通过栈来处理。

  • 栈操作
  1. 循环s进行入栈操作
  2. 当栈内元素>= len(part) 并且相等时,将数据弹出
  3. 最终将栈内数据''.join(stack)返回
  • 字符串模拟
    由于这道题两个入参都是字符串,所以我们通过字符串来模拟栈操作
  • 无赖的省事儿解法
    这里分享一个虽然很无赖的解法,但真的很欢乐,我们通过无线replace替换来完成这道题。
    这么写真的好赖皮,就是不知道面试的时候,会不会被打,哈哈。


解题



栈解题

class Solution:
    def removeOccurrences(self, s: str, part: str) -> str:
        stack, part, ln = [], list(part), len(part)
        for i in s:
            stack.append(i)
            if len(stack) >= len(part):
                while stack[len(stack) - len(part):] == part:
                    for _ in range(len(part)):
                        stack.pop()
        return ''.join(stack)


字符串模拟

class Solution:
    def removeOccurrences(self, s: str, part: str) -> str:
        ret = ''
        ln = len(part)
        for i in s:
            ret += i
            while ret.endswith(part):
                ret = ret[:len(ret) - ln]
        return ret


replace替换

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




相关文章
|
机器学习/深度学习 数据采集 算法
基于 UNet 的农业图像的分割| 学习笔记
快速学习基于 UNet 的农业图像的分割。
基于 UNet 的农业图像的分割| 学习笔记
iOS- 关于AVAudioSession的使用——后台播放音乐
iOS- 关于AVAudioSession的使用——后台播放音乐
720 0
iOS- 关于AVAudioSession的使用——后台播放音乐
|
存储 缓存 Cloud Native
[Snowflake核心技术解读系列二]云原生技术
Snowflake取得了巨大的商业成功,技术是如何支撑起它的千亿美元市值呢?它技术强在哪?本文为大家倾情解读Snowflake的核心技术原理。
[Snowflake核心技术解读系列二]云原生技术
|
7月前
|
机器学习/深度学习 PyTorch 数据处理
PyTorchVideo实战:从零开始构建高效视频分类模型
本文详细介绍了基于PyTorchVideo和PyTorch Lightning构建视频分类模型的全流程。通过Kinetics数据集,利用3D ResNet-50实现高效动作识别。教程涵盖数据加载与增强、模型构建及训练流程,结合两大框架优势,简化开发复杂度并提升性能,为视频理解任务提供完整解决方案。
331 3
PyTorchVideo实战:从零开始构建高效视频分类模型
|
4月前
|
人工智能 自然语言处理 前端开发
《10分钟开发电商页!CodeBuddy自然语言转代码实测:程序员效率革命》
CodeBuddy AI编程助手,实现自然语言到代码全流程生成,支持React开发、Figma转代码,提升效率,限时抽奖送体验码!
|
存储 NoSQL Redis
docker搭建Redis Cluster集群环境
docker搭建Redis Cluster集群环境
420 1
|
11月前
|
存储 算法 物联网
区块链在能源交易中的应用:打造去中心化能源市场
区块链在能源交易中的应用:打造去中心化能源市场
547 22
|
11月前
|
人工智能
Scaling Laws终结,量化无用,AI大佬都在审视这篇论文
《Scaling Laws for Precision》论文提出“精度感知”的扩展理论,将精度纳入模型发展的核心考量,弥补了传统AI模型发展理论忽视精度的不足。研究发现低精度训练会降低模型的有效参数计数,影响性能,并预测了低精度训练和后训练量化带来的损失。作者通过大量实验验证了理论的可靠性和有效性,为计算资源有限情况下如何平衡模型规模和精度提供了新思路。然而,该研究也引发了关于精度与性能权衡复杂性的争议。
254 27
|
10月前
|
数据可视化 数据挖掘 BI
报表工具怎么选?盘点2025年10个最好用的报表平台,建议收藏!
报表工具怎么选?盘点2025年10个最好用的报表平台,建议收藏!
|
12月前
|
人工智能 定位技术 云计算
阿里云+Salesforce:更多功能,上新!
阿里云与Salesforce合作,推出多项新功能,包括移动应用、Connect、外部身份识别等,支持瓴羊智能和高德地图集成,助力企业数字化转型。

热门文章

最新文章