Leetcode每日一题:833. 字符串中的查找与替换(2023.8.15 C++)

目录

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

题目描述:

实现代码与思路:

哈希表 + 模拟

原理思路:


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

题目描述:

        你会得到一个字符串 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", 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 开始,所以它没有被替换。

实现代码与思路:

哈希表 + 模拟

若一个位置有多个匹配

class Solution {
public:string findReplaceString(string s, vector<int>& indices, vector<string>& sources, vector<string>& targets) {unordered_map<int, vector<int>> m;string res = "";for (int i = 0; i < indices.size(); i++)m[indices[i]].push_back(i);// 遍历for (int i = 0; i < s.size();){int flag = 0;if (m.count(i)) // 存在从这里开始的替换{for (auto t: m[i]) // 一个位置可能有多个替换{// 相同if (s.substr(i, sources[t].size()) == sources[t]){flag = 1;res += targets[t];i += sources[t].size(); // 移动break;}}}if (flag == 0){res += s[i];i++;}}return res;}
}; 

不过此题说了不重复,可以直接这样写:

class Solution {
public:string findReplaceString(string s, vector<int>& indices, vector<string>& sources, vector<string>& targets) {unordered_map<int, int> m;string res = "";for (int i = 0; i < indices.size(); i++)m[indices[i]] = i;// 遍历 for (int i = 0; i < s.size();){if (m.count(i)) // 存在从这里开始的替换{int t = m[i];if (s.substr(i, sources[t].size()) == sources[t]){res += targets[t]; // 替换i += sources[t].size(); // 移动continue;}}res += s[i];i++;}return res;}
};

原理思路:

        map储存idx位置和sources,target的下下标,然后模拟即可。

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

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

相关文章

强制Edge或Chrome使用独立显卡【WIN10】

现代浏览器通常将图形密集型任务卸载到 GPU&#xff0c;以改善你的网页浏览体验&#xff0c;从而释放 CPU 资源用于其他任务。 如果你的系统有多个 GPU&#xff0c;Windows 10 可以自动决定最适合 Microsoft Edge 自动使用的 GPU&#xff0c;但这并不一定意味着最强大的 GPU。 …

如何解决docker中出现的“bash: vim: command not found”

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 在docker中&#xff0c;想要执行vim编辑文件&#xff0c;弹出“docker bash: vim: command not found“&#xff08;如下图&#xff09;&#xff0c;请问该如何解决&#xff1f; 问题解决&#xff1a; …

深度学习实战47-利用深度学习技术来解决复杂的人群计数问题,CrowdCountNet模型的应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战47-利用深度学习技术来解决复杂的人群计数问题,CrowdCountNet模型的应用。本篇文章,我将向大家展示如何使用CrowdCountNet这个神奇的工具,以及它是如何利用深度学习技术来解决复杂的人群计数问题。让我们一起进入这个充满…

IK分词器升级,MySQL热更新助一臂之力

ik分词器采用MySQL热更新 ​ 官方所给的IK分词器只支持远程文本文件热更新&#xff0c;不支持采用MySQL热更新&#xff0c;没关系&#xff0c;这难不倒伟大的博主&#xff0c;给哈哈哈。今天就来和大家讲一下如何采用MySQL做热更新IK分词器的词库。 一、建立数据库表 CREATE…

四、Linux中cd、pwd以及相对/绝对路径和特殊路径符

1、cd命令&#xff1a; cd命令可以切换当前工作目录&#xff0c;基础语法是&#xff1a; cd [linux路径] &#xff08;1&#xff09;、打开Linux的命令提示行&#xff0c;当前工作目录是home&#xff0c;输入“cd /”&#xff0c;可以切换到根目录下&#xff0c;在根目录下输…

一、DVP摄像头调试笔记(排查问题篇)

一、DVP摄像头无应答排查&#xff08;MCLK&#xff09; 1、首先检查当前MCLK 时钟是否存在&#xff0c;MCLK可以理解为摄像头的心跳&#xff08;没有主时钟就是主控或者晶振没有工作&#xff0c;应该检测主控驱动/检查晶振电源不起震问题&#xff09;。目前提供MCLK存在两种方…

多维时序 | MATLAB实现CNN-BiGRU-Attention多变量时间序列预测

多维时序 | MATLAB实现CNN-BiGRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现CNN-BiGRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-BiGRU-Attention多变量时间序列预测&#xff0c;CNN-BiGRU-Attent…

Markdown语法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Markdown语法目录 前言1.标题2.文本样式3.列表四.图片5.链接6.目录7.代码片7.表格8.注脚9.注释10.自定义列表11.LaTeX数学公式12.插入甘特图13.插入UML图14.插入Merimaid流程…

24届近5年南京工业大学自动化考研院校分析

今天给大家带来的是南京工业大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、南京工业大学 学校简介 南京工业大学&#xff08;Nanjing Tech University&#xff09;&#xff0c;简称“南工”&#xff0c;位于江苏省南京市&#xff0c;由国家国防科技工业局、住…

day3 STM32 GPIO口介绍

GPIO接口简介 通用输入输出接口GPIO是嵌入式系统、单片机开发过程最常用的接口&#xff0c;用户可以通过编程灵活的对接口进行控制&#xff0c;实现对电路板上LED、数码管、按键等常用设备控制驱动&#xff0c;也可以作为串口的数据收发管脚&#xff0c;或AD的接口等复用功能使…

如何基于 ACK Serverless 快速部署 AI 推理服务

作者&#xff1a;元毅 随着 AI 浪潮的到来&#xff0c;各种 AI 应用层出不穷&#xff0c;众所周知 AI 应用对 GPU 资源强烈依赖&#xff0c;但 GPU 很昂贵&#xff0c;如何降低 GPU 资源使用成本成为用户首要问题。而 AI 与 Serverless 技术结合&#xff0c;完全可以达到按需使…

lodash常用方法笔记

_.fromPairs(pairs) 与_.toPairs正好相反&#xff1b;这个方法返回一个由键值对pairs构成的对象。 _.fromPairs([[fred, 30], [barney, 40]]); // > { fred: 30, barney: 40 }Object.fromEntries()有同样的功能&#xff0c;只是在高版本浏览器才支持&#xff1a; _toPai…