【leetcode】替换后的最长重复字符、将字符串翻转到单调递增

1.替换后的最长重复字符

示例如下:

 

下面我们来分析一下一个例子,其中K = 2

暴力枚举

这里的字符串s是仅由大写字母组成,首先我们尝试用暴力解法的思路来想一下这道题,通过从第一个字符开始进行枚举,如果出现了条件判断不成立,也就是说,需要替换的字符数量已经超过了K个,因此对于本次枚举的字符串再往后的字符就不可能是重复的字符串了,因此在从下一个字符进行枚举。

接下来继续从下一个字符开始枚举:

知道字符串s的末尾,然后在进行找最大重复子串的同时用一个变量记录最大长度即可,这就是暴力枚举。

滑动窗口

如果back走到上图的位置,那么此时已经无法满足替换K个窗口里的字符是该字符串是重复字符了,此时如果继续让back往后走,那么接下来的子串就不可能是重复字符的子串了,因此我们要移动prev:

然后此时窗口内的字符就满足重复字符的子串了,然后继续先后移动back

因此使用滑动窗口的关键是要进行判断:窗口中的子串是否可以不超过K次替换后是重复字符子串。

class Solution {
public:int characterReplacement(string s, int k) {//开辟一个数组,存储窗口中不同类字符出现的次数vector<int> v(26);int prev = 0,back = 0;int max_count = 0;int res = 0;while(back < s.length()){//进窗口v[s[back]-'A']++;//vector<int> v_copy(v);//std::sort(v_copy.begin(),v_copy.end(),std::greater<int>());//max_count = v_copy[0];max_count = *std::max_element(v.begin(),v.end());//判断while(back-prev+1-max_count > k){//出窗口v[s[prev]-'A']--;++prev;}//更新结果res = std::max(res,back-prev+1);++back;}return res;}
};

2.将字符串翻转到单调递增

示例:

 动态规划

下面我们来分析一个示例:

 

通过上面例子的逐个位置分析可以理解到,最小翻转次数就是min(某个位置的前面的1的个数+位置后的0的个数),因此我们可以定义两个数组:dp1,dp0,分别表示某个位置前1的个数,位置后0的个数。

class Solution {
public:int minFlipsMonoIncr(string s) {//s中1的前缀和,0的后缀和vector<int> dp0(s.size());vector<int> dp1(dp0);int res = INT_MAX;for(int i = 1,j = s.size()-2;i<s.size();++i,--j){//1的前缀和if('1' == s[i-1])dp1[i] = dp1[i-1]+1;elsedp1[i] = dp1[i-1];//0的后缀和if('0' == s[j+1])dp0[j] = dp0[j+1]+1;elsedp0[j] = dp0[j+1];}for(int i = 0;i<dp0.size();++i)res = std::min(res,dp0[i]+dp1[i]);return INT_MAX == res ? 0 : res;}
};

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

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

相关文章

如何制作“优美”PPT

目录 1.免费PPT模板网站&#xff1a; 2.免费有较好质量的图片网站&#xff1a; 免费图片资源 免费透明PNG图片资源&#xff1a; 免费icon图片资源&#xff1a; 3.选择好的图片&#xff1a; 图片底色 4.要与不要 千万不要&#xff1a; 一定要&#xff1a; 6.一些建议…

类和对象一

目录 1.类的引入 2.类的定义 3.访问限定符 4.类的作用域 5.类对象模型 6.类的大小 1.类的引入 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体不仅可以定义变量&#xff0c;也可以定义函数。 C兼容C语言&#xff0c;结构用法可以继续使用 同时sruct也升…

【计算机网络】实验13:运输层端口

实验13 运输层端口 一、实验目的 本次实验旨在验证TCP和IP运输层端口号的作用&#xff0c;深入理解它们在网络通信中的重要性。通过实验&#xff0c;我将探讨端口号如何帮助区分不同的应用程序和服务&#xff0c;使得在同一台主机上能够同时运行多个网络服务而不发生冲突。此…

关于睡懒觉

我们经常听到一个词&#xff1a;睡懒觉。 我认为&#xff0c;睡懒觉这个词&#xff0c;是错误的。 人&#xff0c;是需要睡眠的&#xff0c;睡不够&#xff0c;就不会醒。睡够了&#xff0c;自然会醒&#xff0c;也不想继续睡。不信你试试&#xff0c;睡够了&#xff0c;你…

【推荐算法】单目标精排模型——FiBiNET

key word: 学术论文 Motivation&#xff1a; 传统的Embedding&MLP算法是通过内积和Hadamard product实现特征交互的&#xff0c;这篇文章的作者提出了采用SENET实现动态学习特征的重要性&#xff1b;作者认为简单的内积和Hadamard product无法有效对稀疏特征进行特征交互&a…

C语言:define定义常量和定义宏(详解)

本篇博客给大家带来的是#define定义常量和#define定义宏的方法 &#x1f41f;&#x1f41f;文章专栏&#xff1a;C语言 &#x1f680;&#x1f680;若有问题评论区下讨论&#xff0c;我会及时回答 ❤❤欢迎大家点赞、收藏、分享 你们的支持就是我创造的动力 今日思想&#xff1…

Spring Boot如何实现防盗链

一、什么是盗链 盗链是个什么操作&#xff0c;看一下百度给出的解释&#xff1a;盗链是指服务提供商自己不提供服务的内容&#xff0c;通过技术手段绕过其它有利益的最终用户界面&#xff08;如广告&#xff09;&#xff0c;直接在自己的网站上向最终用户提供其它服务提供商的…

Unity入门(了解生命周期)

目录 1.新建Script&#xff08;给物体添加C#代码&#xff09; 2.Unity常用的生命周期介绍 1.新建Script&#xff08;给物体添加C#代码&#xff09; 首先点击物体&#xff0c;选择Add Component 搜索 New Script&#xff0c;自命名添加这里命名为PlayerController 2.打开Pla…

【OpenCV】图像阈值

简单阈值法 此方法是直截了当的。如果像素值大于阈值&#xff0c;则会被赋为一个值&#xff08;可能为白色&#xff09;&#xff0c;否则会赋为另一个值&#xff08;可能为黑色&#xff09;。使用的函数是 cv.threshold。第一个参数是源图像&#xff0c;它应该是灰度图像。第二…

神经网络中的过拟合问题及其解决方案

目录 ​编辑 过拟合的定义与影响 过拟合的成因 1. 模型复杂度过高 2. 训练数据不足 3. 训练时间过长 4. 数据特征过多 解决方案 1. 数据增强 2. 正则化 3. Dropout 4. 提前停止 5. 减少模型复杂度 6. 集成学习 7. 交叉验证 8. 增加数据量 9. 特征选择 10. 使…

Redis篇-4--原理篇3--Redis发布/订阅(Pub/Sub)

1、概述 Redis 发布/订阅&#xff08;Publish/Subscribe&#xff0c;简称 Pub/Sub&#xff09;是一种消息传递模式&#xff0c;允许客户端订阅一个或多个通道&#xff08;channel&#xff09;&#xff0c;并接收其他客户端发布到这些通道的消息。 2、Redis 发布/订阅的主要概…

ubuntu 7z解压rar文件报错:unsupported method message

问题说明 最近项目需要支持线上上传rar格式&#xff0c;7z来解压缩入库。开发测试过程中发现使用以下命令解压报错&#xff0c; 7z x FileImportTest01.rar -p"123456" -o/home/download -y文件目录内容已列出&#xff0c;但无法解压文件!!! 仔细检查命令没有问题…

流网络等价性证明:边分解后的最大流保持不变

流网络等价性证明:边分解后的最大流保持不变 问题描述证明思路伪代码C 代码实现解释问题描述 在流网络中,证明将一条边分解为两条边所得到的是一个等价的网络。具体来说,假设流网络 $ G $ 包含边 $ (u, v) $,我们以如下方式创建一个新的流网络 $ G’ $: 创建一个新结点 $…

编译问题 fatal error: rpc/rpc.h: No such file or directory

在编译一些第三方软件的时候&#xff0c;会经常遇到一些文件识别不到的问题&#xff0c;这里整理下做个归总。 目前可能的原因有&#xff08;排序分先后&#xff09;&#xff1a; 文件不存在&#xff1b;文件存在但路径识别不了&#xff1b;…… 这次以常见的编译lmbench测试…

小皮面板(PHPSTUDY)配置多个域名或IP

问题描述 小皮面板默认采用nginx的静态部署&#xff0c;按照使用nginx的习惯只需要额外添加一个server即可&#xff0c;但是会发现直接往配置文件里添加新的server是不生效的&#xff0c;小皮的官网论坛几乎已经停止维护&#xff0c;因此资料较少&#xff0c;原本也没有仔细使…

《AI行政管理:开启高效治理新时代》

一、引言 AI 行政管理能力的定义和重要性 AI 行政管理能力是指人工智能在行政管理领域的应用能力。它涵盖了多个方面&#xff0c;包括政府决策支持、公共服务优化、行政流程自动化、社会治理与公共安全以及政府内部管理等。在当今时代&#xff0c;AI 行政管理能力具有至关重要…

Golang使用etcd构建分布式锁案例

在本教程中&#xff0c;我们将学习如何使用Go和etcd构建分布式锁系统。分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要。它有助于维护一致性&#xff0c;防止竞争条件&#xff0c;并确保在任何给定时间只有一个进程独占访问资源。 我们将使用Go作为编程语言&am…

数字IC后端实现常见的physical only cell都有哪些?如何添加这些cell?

数字IC后端实现阶段常见功能cell有哪些&#xff1f;比如AND&#xff0c;AOI&#xff0c;NAND等。 physical cell有哪些&#xff1f;都是干什么用的&#xff1f; 数字后端零基础入门系列 | Innovus零基础LAB学习Day9 &#xff08;1&#xff09; well tap cells&#xff1a;防止…

【NVIDIA orin nx 安装ultralytics yolov11】

注意:不同用户安装的python可能会在不同的路径,因此不同的pip管理会导致安装的 torch和torchvision会在不同的路径下 记得区分用户来运行yolo 一、确认系统 JetPack 版本 此处使用5.1.1 1、查看JetPack 版本 jtop二、安装 ultralytics、pytorch、torchvision、onnxruntime…

CANDENCE:过孔设置 及 如何放置过孔

过孔设置 1、 2、 3、弹出如下对话框 4、选择需要的过孔尺寸&#xff0c;双击 5、调节过孔优先级 6、点击 ”OK“ 完成设置 放置过孔 及 过孔选择 在PCB设计窗口 切换到走线模式 走线时&#xff0c;侧边栏可以选择过孔尺寸 选择好后&#xff0c; 双击左键放置过孔 也…