温州市建设工程质量安全管理总站,南京较好的网站制作公司,如何攻击织梦做的网站,东莞优化电话目录链接#xff1a;
力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目#xff1a;
https://github.com/September26/java-algorithms 原题链接#xff1a;力扣#xff08;LeetCode#xff09;官网 - 全球极客挚爱的技术成长平台 描述#xff1a;
你会得到一…目录链接
力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目
https://github.com/September26/java-algorithms 原题链接力扣LeetCode官网 - 全球极客挚爱的技术成长平台 描述
你会得到一个字符串 s (索引从 0 开始)你必须对它执行 k 个替换操作。替换操作以三个长度均为 k 的并行数组给出indices, sources, targets。
要完成第 i 个替换操作:
检查 子字符串 sources[i] 是否出现在 原字符串 s 的索引 indices[i] 处。如果没有出现 什么也不做 。如果出现则用 targets[i] 替换 该子字符串。
例如如果 s abcd indices[i] 0 , sources[i] ab targets[i] eee 那么替换的结果将是 eeecd 。
所有替换操作必须 同时 发生这意味着替换操作不应该影响彼此的索引。测试用例保证元素间不会重叠 。
例如一个 s abc indices [0,1] sources [abbc] 的测试用例将不会生成因为 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 1000k indices.length sources.length targets.length1 k 1000 indices[i] s.length1 sources[i].length, targets[i].length 50s 仅由小写英文字母组成sources[i] 和 targets[i] 仅由小写英文字母组成 解题思路
* 833. 字符串中的查找与替换
* 解题思路
* 首先把indicessourcestargets融合成一个数组list按照indices的大小排序。
* 然后遍历这个尝试使用list中indices的值去查找看对应的位置是否匹配如果匹配则需要插入两部分
* 1.indice之前的部分。
* 2.替换为targets的部分。
* 然后更新index为当前位置即可。
* 如果不匹配则无需更新因为下次的成功匹配会填充index到当前匹配位置所有的值。
代码
class Solution833
{
public:string findReplaceString(string s, vectorint indices, vectorstring sources, vectorstring targets){vectorpairint, pairstring, 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(), [](pairint, pairstring, string pair1, pairint, pairstring, 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;}
};