LeetCode---378周赛

题目列表

2980. 检查按位或是否存在尾随零

2981. 找出出现至少三次的最长特殊子字符串 I

2982. 找出出现至少三次的最长特殊子字符串 II

2983. 回文串重新排列查询

一、检查按位或是否存在尾随零

这题和位运算有关,不是很难,题目要求至少有两个数的或运算存在一个尾随零,那么我们只管检查每个数字的二进制的最低位是否为0即可,即判断数字的奇偶性(奇数的二进制最低位为1,偶数的二进制最低位为0)

代码如下

class Solution {
public:bool hasTrailingZeros(vector<int>& nums) {int cnt=0;for(auto&e:nums){if((e&1)==0){cnt++;}}return cnt>=2;}
};

 二、找出出现至少三次的最长特殊子字符串I&II

由于下一题和这一题一样,只是数据范围不同,我就一起讲了

这题其实是个分类讨论的题目,不是很难,但是要把细节想清楚,具体的分析如下:

首先弄清楚定义 --- 特殊子字符串是指由单一元素构成的字符串(要求连续),这其实就启发我们要将字符串拆分成一个个由相同字母组成的子字符串来分析问题,同时我们只关心子字符串的长度问题,所以我们可以提前处理得到由单一字母组成的子字符串长度数组

(用哈希表unordered_map<char,vector<int>>存放,具体看代码)

然后我们来分析单一字母组成的字符串长度数组该如何处理

(假设数组中的最大元素为L1,第二大元素为L2,第三大元素为L3,满足L1>=L2>=L3)

1、用数组中的一个元素(即一段字符串)来得到出现3次的特殊字符串,肯定选择最大长度的字符串,答案为L1 - 2   (这个公式是观察出来的可以举几个例子看看)

2、用数组中的两个元素(即两段字符串)来得到出现3次的特殊字符串,肯定选择最大长度和次大长度的字符串

        2.1、L1=L2,答案为L1 - 1

        2.2、L1>L2,答案为L2

        答案为min( L1 - 1,L2 )

3、用数组中的三个元素(即三段字符串)来得到出现3次的特殊字符串,肯定选择最大长度和次大长度和第三大长度的字符串,答案为L3

(如果L1=L2=L3,答案为L3,如果L1>L2=L3,答案为L3,如果L1>L2>L3,答案为L3)

综上所诉:答案为max(L1,min( L1 - 1,L2 ),L3)

【注意】上面所有的结论均是观察出来的

考虑到不是所有的数组大小都>=3,我们可以提前往数组中加入两个0,方便后面代码的书写

代码如下

class Solution {
public:int maximumLength(string s) {int n=s.size();unordered_map<char,vector<int>>mp;char x=s[0];int len=0;for(int i=0;i<n;i++){if(x==s[i]) len++;else{mp[x].push_back(len);len=1;x=s[i];}}mp[x].push_back(len);int ans=0;for(auto it=mp.begin();it!=mp.end();++it){auto& v=it->second;v.push_back(0);v.push_back(0);sort(v.begin(),v.end(),greater<int>());int L1=v[0],L2=v[1],L3=v[2];int res=max(L1-2,max(min(L1-1,L2),L3));ans=max(ans,res);}return ans?ans:-1;}
};

三、回文串重新排列查询

这题是大模拟,里面用到一些小技巧,单个来看它们不是很难,但要把它们组合在一起就不简单了

题目意思很明确,就是一个字符串,告诉你它的左右两边各有一段区间可以"修改",要你判断是否能将它变成回文串,返回所有查询的结果

技巧一:我们可以将字符串的左右两个部分拆分开来,然后将右边的字符串翻转一下,那么现在的问题就成了能否让两个字符串相等(由于题目给的字符串长度为偶数,不用担心中间元素如何处理的问题)

代码如下

class Solution {
public:vector<bool> canMakePalindromeQueries(string str, vector<vector<int>>& queries) {//技巧一int n=str.size()/2;string s=str.substr(0,n),t=str.substr(n);reverse(t.begin(),t.end());//预处理//技巧二vector<int>dif(n+1);for(int i=0;i<n;i++) dif[i+1]=dif[i]+(s[i]!=t[i]);//技巧三vector<vector<int>>pre_s(26,vector<int>(n+1));auto pre_t=pre_s;for(int i=0;i<n;i++){for(int j=0;j<26;j++){pre_s[j][i+1]=pre_s[j][i];pre_t[j][i+1]=pre_t[j][i];   }int si=s[i]-'a',ti=t[i]-'a';pre_s[si][i+1]++;pre_t[ti][i+1]++;}auto substract=[&](int l,int r)->bool{for(int i=0;i<26;i++){if(pre_s[i][r+1]-pre_s[i][l]!=pre_t[i][r+1]-pre_t[i][l])return false;}return true;};auto check=[&](int sl,int sr,int tl,int tr,vector<vector<int>>&pre_s,vector<vector<int>>&pre_t)->bool{if(dif[sl]||dif[n]-dif[max(tr,sr)+1])//[0,sl) [tr+1,n)区间内的字符严格相等---是三种情况的共同条件,这里把它放到最前面判断return false;if(sr<tl){return dif[tl]-dif[sr+1]==0&&substract(sl,sr)&&substract(tl,tr);}else{if(tr<=sr){return substract(sl,sr);}else{vector<int>tmp1(26),tmp2(26);for(int i=0;i<26;i++){tmp1[i]=pre_s[i][sr+1]-pre_s[i][sl];tmp2[i]=pre_t[i][tr+1]-pre_t[i][tl];tmp1[i]-=pre_t[i][tl]-pre_t[i][sl];tmp2[i]-=pre_s[i][tr+1]-pre_s[i][sr+1];if(tmp1[i]<0||tmp2[i]<0)//这里一定要判断return false;}return tmp1==tmp2;}}};vector<bool>ans(queries.size());for(int i=0;i<queries.size();i++){int sl=queries[i][0],sr=queries[i][1];int tl=2*n-1-queries[i][3],tr=2*n-1-queries[i][2];//右边的区间需要修正一下ans[i] = sl<=tl?check(sl,sr,tl,tr,pre_s,pre_t):check(tl,tr,sl,sr,pre_t,pre_s);}return ans;}
};

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

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

相关文章

案例073:基于微信小程序的智慧旅游平台开发

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

用贪心算法编程求解任务安排问题

题目&#xff1a;用贪心算法编程求解以下任务安排问题 一个单位时间任务是恰好需要一个单位时间完成的任务。给定一个单位时间任务的有限集S。关于S的一个时间表用于描述S中单位时间任务的执行次序。时间表中第1个任务从时间0 开始执行直至时间1 结束&#xff0c;第2 个任务从时…

20240104确认AIO-3399J的开发板适配ov13850摄像头不支持4K分辨率录像

20240104确认AIO-3399J的开发板适配ov13850摄像头不支持4K分辨率录像 2024/1/4 13:23 开发板&#xff1a;Firefly的AIO-3399J【RK3399】 SDK&#xff1a;rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.0.tar.bz2.ab Android1…

人工智能如何重塑金融服务业

在体验优先的世界中识别金融服务业中的AI使用场景 人工智能&#xff08;AI&#xff09;作为主要行业的大型组织的重要业务驱动力&#xff0c;持续受到关注。众所周知&#xff0c;传统金融服务业在采用新技术方面相对滞后&#xff0c;一些组织使用的还是上世纪50年代和60年代发…

Android Jetpack学习系列——Navigation

写在前面 Google在2018年就推出了Jetpack组件库&#xff0c;但是直到今天我才给重视起来&#xff0c;这真的不得不说是一件让人遗憾的事。过去几年的空闲时间里&#xff0c;我一直在尝试做一套自己的组件库&#xff0c;帮助自己快速开发&#xff0c;虽然也听说过Jetpack&#…

Android如何正确使用 Canvas 的 save() 和 restore() 方法

如何正确使用 Canvas 的 save() 和 restore() 方法 在Android的绘图API中&#xff0c;Canvas类提供了一系列强大的功能来绘制自定义视图。为了更高效地管理绘图状态和变换&#xff0c;Canvas类提供了save()和restore()方法。正确使用这些方法是高效绘图和避免常见错误的关键。 …

任务需求分析中的流程图、用例图、er图、类图、时序图线段、图形的作用意义

任务需求分析中的流程图、用例图、er图、类图、时序图线段、图形的作用意义 流程图 流程图中各种图形的含义及用法解析 连接线符号 连接各要素&#xff0c;表示流程的顺序或过程的方向。 批注符号 批注或说明&#xff0c;也可以做条件叙述。 子流程 流程中一部分图形的逻辑…

机器人动力学一些笔记

动力学方程中&#xff0c;Q和q的关系(Q是sita) Q其实是一个向量&#xff0c;q(Q1&#xff0c;Q2&#xff0c;Q3&#xff0c;Q4&#xff0c;Q5&#xff0c;Q6)&#xff08;假如6个关节&#xff09; https://zhuanlan.zhihu.com/p/25789930 举个浅显易懂的例子&#xff0c;你在房…

Windows内核理论基础学习

文章目录 前言Windosw内核 理论基础Windows体系结构CPU权限级别内存空间布局Windows内核结构硬件抽象层&#xff08;HAL&#xff09;内核层执行体层设备驱动程序文件系统/存储管理网络 Windows子系统窗口管理图形设备接口 系统线程和系统进程 内核基本概念处理器模式内存管理进…

项目框架构建之5:日志的构建

本文是“项目框架构建”系列之5&#xff0c;本文介绍日志的构建。 为了做出通用的公共日志模块&#xff0c;我们需要使用微软的Microsoft.Extensions.Logging日志管理模块&#xff0c;该模块提供了灵活且可扩展的日志记录机制&#xff0c;它为整个.net应用程序提供了一致统一的…

02-微服务-Eureka注册中心

Eureka注册中心 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图&#xff1a; 大家思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f;有多个user-service实例地址&#xff0c;…

每日一道算法题day-one(备战蓝桥杯)

从今天开始博主会每天做一道算法题备战蓝桥杯&#xff0c;并分享博主做题的思路&#xff0c;有兴趣就加入我把&#xff01; 算法题目&#xff1a; 有一个长度为 N 的字符串 S &#xff0c;其中的每个字符要么是 B&#xff0c;要么是 E。 我们规定 S 的价值等于其中包含的子…

牛客网面试题知识点记录-03

1.题目讲解重写后子类调用父类的方法总结&#xff1a;当子类重写了父类方法A&#xff0c;父类方法直接调用被重写的父类方法后&#xff0c;调用的是子类的重写的父类方法A。 class Test {public static void main(String[] args) {System.out.println(new B().getValue());}st…

在线负公差测径仪 生产场景智能化

在线负公差测径仪是专为负公差轧制而研发的精密仪器&#xff0c;除检测的外径尺寸外&#xff0c;还能对负公差信息进行展示。让操作工对生产更加得心应手。 负公差测径仪同样采用八轴测头进行非接触式的在线检测&#xff0c;以实现全方位的尺寸检测&#xff0c;并将截面图实时展…

申请域名SSL证书并自动推送至阿里云 CDN

近期国外SSL证书厂商调整了免费证书的续签规则&#xff0c;一年期的证书全部取消&#xff0c;现在只能申请90天有效期的免费证书。普通web站点可以通过宝塔面板或部署acme.sh等证书自动管理工具来实现自动化申请和部署&#xff0c;但是阿里云之类的CDN服务就只能通过手动或Open…

初步认识API安全

一、认识API 1. 什么是API API(应用程序接口)&#xff1a;是一种软件中介&#xff0c;它允许两个不相关的应用程序相互通信。它就像一座桥梁&#xff0c;从一个程序接收请求或消息&#xff0c;然后将其传递给另一个程序&#xff0c;翻译消息并根据 API 的程序设计执行协议。A…

利用阿里云的尖端数据库解决方案增强游戏数据管理

在快节奏和动态的游戏世界中&#xff0c;对于努力为玩家提供无缝体验的公司来说&#xff0c;管理大量数据是一项关键挑战。阿里云是亚太地区的主要参与者&#xff0c;也是全球公认的运营数据库管理系统领导者&#xff0c;提供量身定制的创新解决方案&#xff0c;以应对游戏公司…

C# 全屏label控件实现的贪吃蛇。

C# 全屏label控件实现的贪吃蛇。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using stat…

案例074:基于微信小程序的儿童预防接种预约管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

uniCloud 的 schema2code 【实用教程】

schema2code 用于通过 schema 文件&#xff0c;自动生成对表进行增删改查的操作页面。 以 uniCloud-aliyun/database/todo.schema.json 为例 {"bsonType": "object","required": [],"permission": {"read": true,"cr…