当前位置: 首页 > news >正文

​LeetCode解法汇总833. 字符串中的查找与替换

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

你会得到一个字符串 s (索引从 0 开始),你必须对它执行 k 个替换操作。替换操作以三个长度均为 k 的并行数组给出:indicessources,  targets

要完成第 i 个替换操作:

  1. 检查 子字符串  sources[i] 是否出现在 原字符串 s 的索引 indices[i] 处。
  2. 如果没有出现, 什么也不做 。
  3. 如果出现,则用 targets[i] 替换 该子字符串。

例如,如果 s = "abcd" , indices[i] = 0 , sources[i] = "ab", targets[i] = "eee" ,那么替换的结果将是 "eeecd" 。

所有替换操作必须 同时 发生,这意味着替换操作不应该影响彼此的索引。测试用例保证元素间不会重叠 

  • 例如,一个 s = "abc" ,  indices = [0,1] , sources = ["ab","bc"] 的测试用例将不会生成,因为 "ab" 和 "bc" 替换重叠。

在对 s 执行所有替换操作后返回 结果字符串 。

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

示例 1:

输入:s = "abcd", indices = [0,2], sources = ["a","cd"], targets = ["eee","ffff"]
输出:"eeebffff"
解释:
"a" 从 s 中的索引 0 开始,所以它被替换为 "eee"。
"cd" 从 s 中的索引 2 开始,所以它被替换为 "ffff"。

示例 2:

输入:s = "abcd", indices = [0,2], sources = ["ab","ec"], targets = ["eee","ffff"]
输出:"eeecd"
解释:
"ab" 从 s 中的索引 0 开始,所以它被替换为 "eee"。
"ec" 没有从原始的 S 中的索引 2 开始,所以它没有被替换。

提示:

  • 1 <= s.length <= 1000
  • k == indices.length == sources.length == targets.length
  • 1 <= k <= 100
  • 0 <= indices[i] < s.length
  • 1 <= sources[i].length, targets[i].length <= 50
  • s 仅由小写英文字母组成
  • sources[i] 和 targets[i] 仅由小写英文字母组成

解题思路:

* 833. 字符串中的查找与替换

* 解题思路:

* 首先,把indices,sources,targets融合成一个数组list,按照indices的大小排序。

* 然后遍历这个,尝试使用list中indices的值去查找,看对应的位置是否匹配,如果匹配,则需要插入两部分:

* 1.indice之前的部分。

* 2.替换为targets的部分。

* 然后更新index为当前位置即可。

* 如果不匹配,则无需更新,因为下次的成功匹配会填充index到当前匹配位置所有的值。

代码:

class Solution833
{
public:string findReplaceString(string s, vector<int> &indices, vector<string> &sources, vector<string> &targets){vector<pair<int, pair<string, string>>> list;for (int i = 0; i < indices.size(); i++){list.push_back(make_pair(indices[i], make_pair(sources[i], targets[i])));}sort(list.begin(), list.end(), [](pair<int, pair<string, string>> pair1, pair<int, pair<string, string>> pair2){ return pair2.first - pair1.first > 0; });string out;int index = 0;for (auto item : list){// 如果相同,则填入替换的string olds = s.substr(item.first, min(item.second.first.size(), s.size() - item.first));if (olds == item.second.first){out.append(s.substr(index, item.first - index));out.append(item.second.second);index = item.first + item.second.first.size();}}out.append(s.substr(index, s.size() - index));return out;}
};

http://www.lryc.cn/news/130092.html

相关文章:

  • ide internal errors【bug】
  • 阿里云与中国中医科学院合作,推动中医药行业数字化和智能化发展
  • 【Redis】Redis 的学习教程(五)之 SpringBoot 集成 Redis
  • github以及上传代码处理
  • 【PACS源码】认识PACS的架构和工作流程
  • 【C++】开源:跨平台Excel处理库-libxlsxwriter配置使用
  • 前端-轮询
  • Python “贪吃蛇”游戏,在不断改进中学习pygame编程
  • Linux网络编程_Ubuntu环境配置安装
  • gradle java插件
  • 神经网络基础-神经网络补充概念-48-rmsprop
  • 分析Flink,源和算子并行度不一致时,运行一段时间后,看似不再继续消费的问题,提供解决思路。
  • PyTorch训练深度卷积生成对抗网络DCGAN
  • Spring-4-掌握Spring事务传播机制
  • [PyTorch][chapter 49][创建自己的数据集 1]
  • 中间件(二)dubbo负载均衡介绍
  • springboot异步文件上传获取输入流提示找不到文件java.io.FileNotFoundException
  • 安装jenkins-cli
  • linux通过NC工具启动临时端口监听
  • 开源语音聊天软件Mumble
  • JDK 1.6与JDK 1.8的区别
  • 单片机实训报告
  • 【编织时空四:探究顺序表与链表的数据之旅】
  • PHP8的字符串操作1-PHP8知识详解
  • 电脑提示msvcp140.dll丢失的解决方法,dll组件怎么处理
  • stable diffusion基础
  • Greiner–Hormann裁剪算法深度探索:C++实现与应用案例
  • Automatically Correcting Large Language Models
  • 【学习FreeRTOS】第8章——FreeRTOS列表和列表项
  • 分布式图数据库 NebulaGraph v3.6.0 正式发布,强化全文索引能力