LeetCode 833. 字符串中的查找与替换(排序,replace)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

某个字符串 S 需要执行一些替换操作,用新的字母组替换原有的字母组(不一定大小相同)。

每个替换操作具有 3 个参数:起始索引 i,源字 x 和目标字 y。

规则是:如果 x 从原始字符串 S 中的位置 i 开始,那么就用 y 替换出现的 x。如果没有,则什么都不做。

举个例子,如果 S = “abcd” 并且替换操作 i = 2,x = “cd”,y = “ffff”,那么因为 “cd” 从原始字符串 S 中的位置 2 开始,所以用 “ffff” 替换它。

再来看 S = “abcd” 上的另一个例子,如果一个替换操作 i = 0,x = “ab”,y = “eee”,以及另一个替换操作 i = 2,x = “ec”,y = “ffff”,那么第二个操作将不会执行,因为原始字符串中 S[2] = 'c',与 x[0] = 'e' 不匹配。

所有这些操作同时发生。保证在替换时不会有任何重叠S = "abc", indexes = [0, 1], sources = ["ab","bc"] 不是有效的测试用例。

示例 1:
输入:S = "abcd", indexes = [0,2], sources = ["a","cd"], 
targets = ["eee","ffff"]
输出:"eeebffff"
解释:
"a" 从 S 中的索引 0 开始,所以它被替换为 "eee""cd" 从 S 中的索引 2 开始,所以它被替换为 "ffff"。示例 2:
输入:S = "abcd", indexes = [0,2], sources = ["ab","ec"], 
targets = ["eee","ffff"]
输出:"eeecd"
解释:
"ab" 从 S 中的索引 0 开始,所以它被替换为 "eee""ec" 没有从原始的 S 中的索引 2 开始,所以它没有被替换。提示:
0 <= S.length <= 1000
S 仅由小写英文字母组成
0 <= indexes.length <= 100
0 <= indexes[i] < S.length
sources.length == indexes.length
targets.length == indexes.length
1 <= sources[i].length, targets[i].length <= 50
sources[i] 和 targets[i] 仅由小写英文字母组成

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-and-replace-in-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

字符串替换 http://www.cplusplus.com/reference/string/string/replace/

class Solution {
public:string findReplaceString(string S, vector<int>& indexes, vector<string>& sources, vector<string>& targets) {int n = S.size(), i = 0, k, len;unordered_map<int,int> m;for(i = 0; i < indexes.size(); i++) {m[indexes[i]] = i;//原始数值 --> 对应的原始序号}sort(indexes.begin(), indexes.end());for(i = int(indexes.size())-1; i >= 0; i--){   //从大的序号开始替换,不需考虑序号变化k = m[indexes[i]];len = sources[k].size();if(S.substr(indexes[i], len) == sources[k]){S.replace(indexes[i], len, targets[k]);}}return S;}
};

8 ms 10.7 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Json.NET

我前面的一篇博客 Metro应用Json数据处理 介绍了如何使用 DataContractJsonSerializer 类将对象的实例序列化为JSON字符串以及将JSON字符串反序列化为对象的实例的处理方式。而此种处理方式的一个很大的缺点就是要求JSON字符串格式是约定好的&#xff0c;而在很多情况下我们无法…

天池 在线编程 最大得分(DP)

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/164423301311799378/184808348725744275 2. 解题 class Solution { public:/*** param matrix: the matrix* return: the maximum score you can get*/int maximumScore(vector<vector<i…

天池 在线编程 LR String

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/164423301311799378/184808348725744276 2. 解题 class Solution { public:/*** param s: a string* param t: a string* param n: max times to swap a l and a r.* return: return if s can …

天池 在线编程 音乐组合

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/164423301311799378/184808348725744274 2. 解题 对60求余后&#xff0c;0, 30的为 Cn2C_n^2Cn2​&#xff0c;其余的相加等于60的&#xff0c;种类相乘 class Solution { public:/*** param …

java之NIO(Channel,Buffer,Selector)

java之NIO 1 什么是NIO Java NIO (New IO&#xff0c;Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API。NIO支持面向缓冲区的、基于通道的IO操作。NIO的三大核心部分&#xff1a;通道(Channel)&#xff0c;缓冲区(Buffer), 选择器(Selector)&#xff0c;数据总是从…

LeetCode 1652. 拆炸弹(前缀和)

文章目录1. 题目2. 解题1. 题目 你有一个炸弹需要拆除&#xff0c;时间紧迫&#xff01;你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。 为了获得正确的密码&#xff0c;你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k > 0 &#xff0c;将…

MYSQL从入门到精通

SQL是数据库的查询语言&#xff0c;语法结构简单&#xff0c;相信本文会让你从入门到熟练。 掌握SQL后&#xff0c;不论你是产品经理、运营人员或者数据分析师&#xff0c;都会让你分析的能力边界无限拓展。别犹豫了&#xff0c;赶快上车吧&#xff01; SQL最小化的查询结构如下…

LeetCode 1653. 使字符串平衡的最少删除次数(DP)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s &#xff0c;它仅包含字符 a 和 b​​​​ 。 你可以删除 s 中任意数目的字符&#xff0c;使得 s 平衡 。 我们称 s 平衡的 当不存在下标对 (i,j) 满足 i < j 且 s[i] b 同时 s[j] a 。 请你返回使 s 平衡 的 最少 删除…

LeetCode 1654. 到家的最少跳跃次数(BFS)

文章目录1. 题目2. 解题1. 题目 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发&#xff0c;到达它的家。 跳蚤跳跃的规则如下&#xff1a; 它可以 往前 跳恰好 a 个位置&#xff08;即往右跳&#xff09;。它可以 往后 跳恰好 b 个位置&#xff08;即往左跳&…

Maven详解及实例

1 什么是Maven Maven对项目进行模型抽象&#xff0c;充分运用的面向对象的思想&#xff0c;Maven可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外&#xff0c;还提供高级项目管理工具。简单的来说Maven是…

Python多线程详解

1、多线程的理解 多进程和多线程都可以执行多个任务&#xff0c;线程是进程的一部分。线程的特点是线程之间可以共享内存和变量&#xff0c;资源消耗少&#xff08;不过在Unix环境中&#xff0c;多进程和多线程资源调度消耗差距不明显&#xff0c;Unix调度较快&#xff09;&…

LeetCode 1655. 分配重复整数(回溯)

文章目录1. 题目2. 解题2.1 回溯1. 题目 给你一个长度为 n 的整数数组 nums &#xff0c;这个数组中至多有 50 个不同的值。 同时你有 m 个顾客的订单 quantity &#xff0c;其中&#xff0c;整数 quantity[i] 是第 i 位顾客订单的数目。请你判断是否能将 nums 中的整数分配给…

Flink的异步I/O及Future和CompletableFuture

1 概述 Flink在做流数据计算时&#xff0c;经常要外部系统进行交互&#xff0c;如Redis、Hive、HBase等等存储系统。系统间通信延迟是否会拖慢整个Flink作业&#xff0c;影响整体吞吐量和实时性。 如需要查询外部数据库以关联上用户的额外信息&#xff0c;通常的实现方式是向数…

LeetCode 1656. 设计有序流(数组)

文章目录1. 题目2. 解题1. 题目 有 n 个 (id, value) 对&#xff0c;其中 id 是 1 到 n 之间的一个整数&#xff0c;value 是一个字符串。不存在 id 相同的两个 (id, value) 对。 设计一个流&#xff0c;以 任意 顺序获取 n 个 (id, value) 对&#xff0c;并在多次调用时 按 …

flask框架+mysql数据库并与前台数据交互

在Flask使用数据库 我们将使用Flask-SQLAlchemy 的扩展来管理数据库。由SQLAlchemy项目提供的&#xff0c;已封装了关系对象映射&#xff08;ORM&#xff09;的一个插件。 ORMs允许数据库程序用对象的方式替代表和SQL语句。面向对象的操作被ORM转化为数据库命令。这样就意味着&…

Canal原理及其使用

1 什么是canal canal是用java开发的基于数据库增量日志解析&#xff0c;提供增量数据订阅&消费的中间件。目前&#xff0c;canal主要支持了MySQL的binlog解析&#xff0c;解析完成后才利用canal client 用来处理获得的相关数据。&#xff08;数据库同步需要阿里的otter中间…

LeetCode 1657. 确定两个字符串是否接近

文章目录1. 题目2. 解题1. 题目 如果可以使用以下操作从一个字符串得到另一个字符串&#xff0c;则认为两个字符串 接近 &#xff1a; 操作 1&#xff1a;交换任意两个 现有 字符。 例如&#xff0c;abcde -> aecdb操作 2&#xff1a;将一个 现有 字符的每次出现转换为另一…

机器学习简介及学习思维导图

什么是机器学习机器学习是人工智能的一个分支。人工智能的研究是从以“推理”为重点到以“知识”为重点&#xff0c;再到以“学习”为重点&#xff0c;一条自然、清晰的脉络。机器学习是实现人工智能的一个途径&#xff0c;即以机器学习为手段解决人工智能中的问题。机器学习算…

LeetCode 1658. 将 x 减到 0 的最小操作数(哈希)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 和一个整数 x 。每一次操作时&#xff0c;你应当移除数组 nums 最左边或最右边的元素&#xff0c;然后从 x 中减去该元素的值。请注意&#xff0c;需要 修改 数组以供接下来的操作使用。 如果可以将 x 恰好 减到 0 &…

1057: [ZJOI2007]棋盘制作 - BZOJ

Description国际象棋是世界上最古老的博弈游戏之一&#xff0c;和中国的围棋、象棋以及日本的将棋同享盛名。据说国际象棋起源于易经的思想&#xff0c;棋盘是一个8*8大小的黑白相间的方阵&#xff0c;对应八八六十四卦&#xff0c;黑白对应阴阳。而我们的主人公小Q&#xff0c…