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

【leetcode 力扣刷题】删除字符串中的子串or字符以满足要求

删除字符串中的子串或者字符以满足题意要求

  • 1234. 替换子串得到平衡字符串
  • 680. 验证回文串
  • 917. 仅仅反转字母

1234. 替换子串得到平衡字符串

题目链接:1234. 替换子串得到平衡字符串
题目内容:
在这里插入图片描述
题目中给出了平衡字符串的定义——只有’Q’,‘W’,‘E’,'R’四种字符,并且每种字符的数量都是n/4。但是现在给出一个字符串s,它不一定是平衡字符串。如果不是就要通过替换其中一个子串,使其成为平衡字符串。将字符串s看作是待替换部分s1和剩下的部分s2,将s1替换成其他字符串后,能够保证新的s1插入s2后四种字符的数量都是n/4。新的s1插入s2只能增加字符的数量而不能减少字符的数量,因此s2中四种字符的数量均要≤n/4
这个题目使用滑动窗口,滑动窗口内的子串即待删除的s1。其下标用left和right表示,s1是s中[left,right)这一段子串。滑动窗口滑动的过程如下:

  • 1、先固定left,然后right向右移动,移动的同时字符s[right]的数量-1,直到四种字符数量均≤n/4——此时找到了[left,right)这一段s1,使得s中除s1外,四种字符数量均≤n/4;
  • 2、此时逐步右移left,缩小滑动窗口(即s1)的长度,以便找到最短的s1;同时字符s[left]的数量+1,并判s-s1中四种字符的数量是否均≤n/4;
  • 3、每找到一个满足条件的[left,right)滑动窗口,就需要记录窗口的长度,并记录最小值;

代码如下(C++):

class Solution {
public://判断四种字符的数量是否均≤n/4bool check(vector<int>& cnt , int num){if(cnt['Q' - 'A'] > num||cnt['E' - 'A'] > num||cnt['W' - 'A'] > num||cnt['R' - 'A'] > num)return false;return true;}int balancedString(string s) {//先统计s中四种字符的数量vector<int> cnt(26,0);for(char ch : s)cnt[ch-'A']++;		int num = s.size() / 4;//如果一开始就小于等于【实际上是等于】就直接返回0,不需要替换if(check(cnt, num))return 0;//记录最小长度int ans = s.size();//滑动窗口更新过程for(int left = 0, right = 0; left < s.size(); left++){//right右移直到滑动窗口外四种四字符均≤n/4while(right < s.size() && !check(cnt, num)){cnt[s[right] - 'A']--;right++;}//上面循环结束可能是right=s.size(),也可能是满足条件了//如果是right=s.size()了,right不能右移了,之后left右移的过程中只能使得滑动窗口外四种字符的数量增加//如果一旦有left使得有字符数量>n/4,left继续右移已经没有意义,之后的滑动窗口都不满足要求,提前跳出循环if(!check(cnt,num))break;//更新长度ans = min(ans, right - left);cnt[s[left] - 'A']++;}return ans;        }
};

680. 验证回文串

题目链接:680. 验证回文串
题目内容:
在这里插入图片描述
判断一个字符串是否是回文串的时候,使用的是双指针,一个left从下标0开始,一个right从s.size()-1开始,然后如果s[left] == s[right],left++,right–;直到left >= right,遍历完s中的字符。
现在题目是要求我们最多删除一个字符串,判断s是否是回文串。此时有三种情况:

  • 1、s本身就是回文串,能够按照上述的判断过程逐字符对比判断;
  • 2、s本身不是回文串,但是删除一个字符后能够是回文串:s不是回文串,肯定会出现s[left] !=s [right],此时要么删除s[left],然后判断s[left+1~right]是否是回文串;要么删除s[right],判断s[left~right-1]是否是回文串; 这两个只要有一个是回文串即可;【也可能两个都是回文,比如acac删除a得到cac,删除c得到aca,都是回文】
  • 3、s不是回文串,不管删除哪个字符都不能成为回文串——上述第二种情况中,如果不管删除s[left]还是s[right],剩下的都不是回文串,那么如果考虑继续遍历,删除其他字符串,但是s[left] != s[right],不管再去删除s[left+1~right-1]中的哪个字符,都不能使得s变成回文串。

代码如下(C++):

class Solution {
public://判断left~right这一段子串是否是回文串bool ispalindrome(int left, int right, string& s){while(left<right){if(s[left] != s[right])return false;left++;right--;}return true;}bool validPalindrome(string s) {int left = 0, right = s.size()-1;//前后逐字符对比while(left < right){//如果相等就left++,right--if(s[left] == s[right]){left++;right--;}//如果不相等,就去判断left~right-1和left+1~right这两段子串是否是回文串else return ispalindrome(left,right - 1,s) || ispalindrome(left+1,right,s);}return true;}
};

917. 仅仅反转字母

题目链接:917. 仅仅反转字母
题目内容:
在这里插入图片描述
题目说的是英文字母位置反转。看题目以为这个位置反转和之前的反转单词一样,只是把非英文的字符当作单词的分隔符……结果原来是和这个反转字符串类似。只是遇到非英文字母的字符直接跳过不处理。
先看看例子:
在这里插入图片描述
因此这里的位置反转,也是双指针left和right,在s[left]和s[right]都是英文字母的时候,二者交换;如果不是英文字母就跳过,不处理,代码如下(C++):

class Solution {
public://判断是否是英文字母bool check_ch(char ch){if(ch - 'a' >= 0 && ch - 'a' < 26)return true;if(ch - 'A' >= 0 && ch - 'A' < 26)return true;return false;}string reverseOnlyLetters(string s) {//双指针遍历s中每个字符for(int i = 0, j = s.size() -1 ; i < j;){//s[i]和s[j]都是英文字母的时候,交换位置if(check_ch(s[i]) && check_ch(s[j])){swap(s[i],s[j]);i++;j--;}else {//不是英文字母就跳过if(!check_ch(s[i]))i++;if(!check_ch(s[j]))j--;}}return s;}
};

相关文章:

【leetcode 力扣刷题】删除字符串中的子串or字符以满足要求

删除字符串中的子串或者字符以满足题意要求 1234. 替换子串得到平衡字符串680. 验证回文串917. 仅仅反转字母 1234. 替换子串得到平衡字符串 题目链接&#xff1a;1234. 替换子串得到平衡字符串 题目内容&#xff1a; 题目中给出了平衡字符串的定义——只有’Q’&#xff0c;…...

【Unity基础】3.脚本控制物体运动天空盒

【Unity基础】3.脚本控制物体运动&天空盒 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity基础系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;搭建开发环境 &#xff08;1&#xff09;下载visual studio 在我们下载unity编译器的时候&…...

Spring MVC拦截器

拦截器&#xff08;Interceptor&#xff09;是 Spring MVC 提供的一种强大的功能组件。它可以对用户请求进行拦截&#xff0c;并在请求进入控制器&#xff08;Controller&#xff09;之前、控制器处理完请求后、甚至是渲染视图后&#xff0c;执行一些指定的操作。 在 Spring MV…...

ClickHouse的Join算法

ClickHouse的Join算法 ClickHouse是一款开源的列式分析型数据库&#xff08;OLAP&#xff09;&#xff0c;专为需要超低延迟分析查询大量数据的场景而生。为了实现分析应用可能达到的最佳性能&#xff0c;分析型数据库&#xff08;OLAP&#xff09;通常将表组合在一起形成一个…...

java面试题-RabbitMQ面试题

RabbitMQ面试题 面试官&#xff1a;RabbitMQ-如何保证消息不丢失 候选人&#xff1a; 嗯&#xff01;我们当时MYSQL和Redis的数据双写一致性就是采用RabbitMQ实现同步的&#xff0c;这里面就要求了消息的高可用性&#xff0c;我们要保证消息的不丢失。主要从三个层面考虑 第一…...

数据仓库-核心概念

数据仓库 数据仓库&#xff0c;英文名称为Data Warehouse&#xff0c;可简写为DW或DWH。数据仓库&#xff0c;是为企业所有级别的决策制定过程&#xff0c;提供所有类型数据支持的战略集合。它是单个数据存储&#xff0c;出于分析性报告和决策支持目的而创建。为需要业务智能的…...

java中的实体类

在Java与数据库交互时&#xff0c;设计实体类有以下几个原因&#xff1a; 1、对象关系映射&#xff08;ORM&#xff09;&#xff1a;实体类提供了一种将数据库中的表映射为Java对象的方式。这样&#xff0c;开发人员可以使用面向对象的方式操作数据库&#xff0c;而无需编写大…...

使用Puppeteer爬取地图上的用户评价和评论

导语 在互联网时代&#xff0c;获取用户的反馈和意见是非常重要的&#xff0c;它可以帮助我们了解用户的需求和喜好&#xff0c;提高我们的产品和服务质量。有时候&#xff0c;我们需要从地图上爬取用户对某些地点或商家的评价和评论&#xff0c;这样我们就可以分析用户对不同…...

GLSL ES着色器语言 使用矢量和矩阵的相关规范

目录 矢量和矩阵类型 下面是声明矢量和矩阵的例子&#xff1a; 赋值和构造 矢量构造函数 矩阵构造函数 构造矩阵的几种方式 访问元素 . 运算符 矢量的分量名 &#xff3b; &#xff3d;运算符 运算符 矢量和矩阵可用的运算符 矢量和矩阵相关运算 矢量和浮点数的…...

Himall商城- web私有方法

目录 1 Himall商城- web私有方法 1.1 /// 获取售价 1.1.1 //商品批量销售价 1.1.2 //获取组合购的价格 Himall商城- web私有方法 #region web私有方法 /// <summary> /// 获取售价 /// <para>己计算会员折</para> /// </summary> /// <para…...

Spring Boot 整合 Redis,使用 RedisTemplate 客户端

文章目录 一、SpringBoot 整合 Redis1.1 整合 Redis 步骤1.1.1 添加依赖1.1.2 yml 配置文件1.1.3 Config 配置文件1.1.4 使用示例 1.2 RedisTemplate 概述1.2.1 RedisTemplate 简介1.2.2 RedisTemplate 功能 二、RedisTemplate API2.1 RedisTemplate 公共 API2.2 String 类型 A…...

Tomcat 接收请求并传递给工作线程池流程

文章目录 Tomcat 接收请求并传递给工作线程池流程接收 socket 连接 org.apache.tomcat.util.net.SocketProcessorBase#reset结论 Tomcat 接收请求并传递给工作线程池流程 接收 socket 连接 有两个线程 http-nio-8080-ClientPoller-0/1 &#xff08;下文称为 clientPoller&…...

在Linux系统上用C++将主机名称转换为IPv4、IPv6地址

在Linux系统上用C将主机名称转换为IPv4、IPv6地址 功能 指定一个std::string类型的主机名称&#xff0c;函数解析主机名称为IP地址&#xff0c;含IPv4和IPv6&#xff0c;解析结果以std::vector<std::string>类型返回。解析出错或者解析失败抛出std::string类型的异常消…...

【硬件设计】硬件学习笔记二--电源电路设计

硬件学习笔记二--电源电路设计 一、LDO设计1.1 LDO原理1.2 LDO参数1.3 应用 二、DC-DC设计2.1 DC-DC原理2.2 DC-DC参数介绍2.4 DC-DC设计要点2.5 DC-DC设计注意事项 写在前面&#xff1a;本篇笔记来自王工的硬件工程师培训课程&#xff0c;想要学硬件的同学可以去腾讯课堂直接搜…...

day34 集合总结

集合总结 一、概述 作用&#xff1a;存储对象的容器&#xff0c;代替数组的&#xff0c;使用更加的便捷 所处的位置&#xff1a;java.util 体系结构 二、Collection 内部的每一个元素都得是引用数据类型 常用方法 add(Object o) 添加元素 addAll(Collection c) 将指定集…...

【JAVA】 图书管理系统(javaSE简易版 内含画图分析) | 期末大作业课程设计

作者主页&#xff1a;paper jie 的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVA》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…...

区块链技术与应用 - 学习笔记3【比特币数据结构】

大家好&#xff0c;我是比特桃。本系列笔记只专注于探讨研究区块链技术原理&#xff0c;不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划&#xff0c;在“加快数字发展 建设数字中国”篇章中&#xff0c;区块链被列为“十四五”七大数字经济重点产业之一&#…...

Ubuntu下高效Vim的搭建(离线版)

软件界面 可以看到界面下方有一些常用提示信息&#xff1a;文件路径、format、文件类型、光标所在的坐标(x,y)、进度条(百分比)、日期时间 会提示已定义的变量名词(快速补全) 搭建方法 下载资源文件 把Vim 和 .vimrc 拷贝到家目录下&#xff0c;并执行tar -xvf Vim 即可。 …...

阿里云和腾讯云2核2G服务器价格和性能对比

2核2G云服务器可以选择阿里云服务器或腾讯云服务器&#xff0c;腾讯云轻量2核2G3M带宽服务器95元一年&#xff0c;阿里云轻量2核2G3M带宽优惠价108元一年&#xff0c;不只是轻量应用服务器&#xff0c;阿里云还可以选择ECS云服务器u1&#xff0c;腾讯云也可以选择CVM标准型S5云…...

PYTHON(一)——认识python、基础知识

一、为什么要学习python&#xff1f; Python 被认为是人工智能、机器学习的首选语言&#xff0c;可以说是全世界最流行通用范围最广的语言&#xff0c;几乎可以完成所有的任务&#xff0c;像设计游戏、建网站、造机器人甚至人工智能等都广泛使用Python。 二、输出&#xff08;…...

【开发工具】Trae IDE 解决 Windows 下 C 工程无法跳转定义问题

1. 概要 &#x1f44b; 作为 Trae IDE 使用者&#xff0c;在 Windows 环境打开本地 C 工程时&#xff0c;习惯用 Ctrl 鼠标左键 快速跳转函数 / 变量定义却失效&#xff0c;仅能做文本匹配&#xff0c;无法精准定位语义定义。核心原因是 Trae 依赖 LSP&#xff08;语言服务器协…...

计算机毕业设计springboot众筹系统 基于SpringBoot的校园项目众筹融资平台设计与实现 高校创新创业众筹服务与资金管理系统构建研究

计算机毕业设计springboot众筹系统&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样…...

SDMatte抠图实战教程:玻璃/薄纱/羽毛一键去背景,保姆级Web部署指南

SDMatte抠图实战教程&#xff1a;玻璃/薄纱/羽毛一键去背景&#xff0c;保姆级Web部署指南 1. 为什么选择SDMatte进行专业抠图 在日常设计工作中&#xff0c;抠图是最基础也最耗时的环节之一。特别是遇到玻璃制品、薄纱材质、羽毛边缘这类复杂对象时&#xff0c;传统Photosho…...

二相四线步进电机驱动全解析:从原理到Proteus仿真避坑指南

二相四线步进电机驱动全解析&#xff1a;从原理到Proteus仿真避坑指南 在工业自动化与嵌入式开发领域&#xff0c;步进电机因其精准的位置控制能力成为不可或缺的执行元件。而二相四线制步进电机凭借结构简单、成本低廉的优势&#xff0c;尤其受到电子工程师和创客群体的青睐。…...

3大突破:重新定义Revit插件开发流程

3大突破&#xff1a;重新定义Revit插件开发流程 【免费下载链接】RevitAddInManager Revit AddinManager update .NET assemblies without restart Revit for developer. 项目地址: https://gitcode.com/gh_mirrors/re/RevitAddInManager 引言&#xff1a;Revit插件开发…...

vLLM-v0.17.1实操手册:Prometheus监控指标接入与告警配置

vLLM-v0.17.1实操手册&#xff1a;Prometheus监控指标接入与告警配置 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库&#xff0c;由加州大学伯克利分校的天空计算实验室(Sky Computing Lab)开发&#xff0c;现已发展为社区驱动的开源项目。这个框…...

浏览器自动化:OpenClaw+GLM-4.7-Flash爬取数据并生成报告

浏览器自动化&#xff1a;OpenClawGLM-4.7-Flash爬取数据并生成报告 1. 为什么选择OpenClaw做浏览器自动化&#xff1f; 去年我接手了一个每周都要重复的数据分析任务&#xff1a;登录内部系统导出销售数据&#xff0c;清洗后生成可视化报告。这种机械劳动不仅耗时&#xff0…...

为什么90%的Python项目误用SM9?——基于NIST SP 800-56A rev3与GB/T 38635.2的合规性性能审计清单

第一章&#xff1a;SM9密码算法的合规性认知误区与审计必要性在国产密码应用推广过程中&#xff0c;SM9标识密码体系常被误认为“天然合规”——仅因列入《GB/T 38635.1—2020 信息安全技术 SM9标识密码算法 第1部分&#xff1a;总则》即等同于满足等保2.0、密评及《商用密码管…...

freertos 搭建系统框架

1.freertos官网&#xff1a;FreeRTOS™ - FreeRTOS™ &#xff0c;下载对应的freertos源码 2.freertos目录结构&#xff1a; FreeRTOS-Kernel/ ├── include/ # 内核公共头文件 ├── portable/ # 移植层&#xff08;编译器/架构相关代…...

Obsidian插件本地化全攻略:从英文界面到中文体验的完整实施路径

Obsidian插件本地化全攻略&#xff1a;从英文界面到中文体验的完整实施路径 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n 在全球化协作与知识管理的场景中&#xff0c;Obsidian插件的英文界面常成为用户高效使用的障碍。…...