LeetCode---378周赛

news2025/4/8 18:17:45

题目列表

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.coloradmin.cn/o/1356196.html

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

相关文章

基于SSM的新闻网站

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

基于SSM的班级事务管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

WebSocket的优点和缺点:一文详解。

WebSocket 的优缺点 WebSocket 协议是一种双向通信协议&#xff0c;它使用单个 TCP 连接实现全双工通信&#xff0c;这使它比传统的 HTTP 协议更有效率。 WebSocket 优点 双向通信&#xff1a; WebSocket 协议支持双向通信&#xff0c;使服务器和客户端之间的通信更加方便和快…

googlecode.log4jdbc慢sql日志,格式化sql

前言 无论使用原生JDBC、mybatis还是hibernate&#xff0c;使用log4j等日志框架可以看到生成的SQL&#xff0c;但是占位符和参数总是分开打印的&#xff0c;不便于分析&#xff0c;显示如下的效果: googlecode Log4jdbc 是一个开源 SQL 日志组件&#xff0c;它使用代理模式实…

图像预处理——transforms

一、transforms 运行机制 torchvision是PyTorch的一个扩展库&#xff0c;提供了许多计算机视觉相关的工具和功能。下面是关于torchvision中常用模块的介绍&#xff1a; torchvision.transforms&#xff1a;提供了一系列常用的图像预处理方法&#xff0c;用于对图像进行变换、…

【生成人工智能】Ray如何解决生成人工智能基础设施的常见生产挑战

这是我们生成人工智能博客系列的第一部分。在这篇文章中&#xff0c;我们讨论了如何使用Ray来生产常见的生成模型工作负载。即将发布的一篇博客将深入探讨Alpa等项目为什么要使用Ray来扩展大型模型。 生成的图像和语言模型有望改变企业的设计、支持、开发等方式。本博客重点关…

Spring——Spring IOC(2)

1.Spring中的工厂类 1.1 ApplicationContext ApplicationContext的实现类&#xff0c;如下图&#xff1a; ClassPathXmlApplicationContext&#xff1a;加载类路径下 Spring 的配置文件FileSystemXmlApplicationContext&#xff1a;加载本地磁盘下 Spring 的配置文件 1.2 B…

基于Segformer实现PCB缺陷检测(步骤 + 代码)

导 读 本文主要介绍基于Segformer实现PCB缺陷检测 &#xff0c;并给出步骤和代码。 背景介绍 PCB缺陷检测是电子制造的一个重要方面。利用Segformer等先进模型不仅可以提高准确性&#xff0c;还可以大大减少检测时间。传统方法涉及手动检查&#xff0c;无法扩展且容易出错…

体元法--体积计算

文章目录 环境&#xff1a;1.1 体元法介绍&#xff1a;2.1 python代码3.1 可视化 环境&#xff1a; Open3D 1.1 体元法介绍&#xff1a; 用一个个体素去占据点云&#xff0c;然后对所有体素求和 2.1 python代码 conda activete deeplabv3plus(环境名称–安装好open3D的) py…

python django 生鲜商城管理系统

python django 生鲜商城管理系统,包含用户端和管理端 功能&#xff1a; 用户端&#xff1a;商城主页展示&#xff0c;登录&#xff0c;注册&#xff0c;用户中心&#xff0c;购物车&#xff0c;我的订单&#xff0c;购物车结算 管理端&#xff1a;登录&#xff0c;商品&…

QT的坐标系统,回收机制、菜单栏,工具栏,状态栏,对话框及资源文件

QT的坐标系统&#xff0c;回收机制、菜单栏&#xff0c;工具栏&#xff0c;状态栏&#xff0c;对话框及资源文件 文章目录 QT的坐标系统&#xff0c;回收机制、菜单栏&#xff0c;工具栏&#xff0c;状态栏&#xff0c;对话框及资源文件1、QT的坐标系统&#xff1f;2、对象模型…

顶帽运算在OpenCv中的应用

项目背景 假如我们拍了一张自拍&#xff0c;想为自己的照片添加一个酷炫的火星飞舞的效果&#xff0c;素材库中正好有一张火焰的照片&#xff0c;如果想去除图中的火焰&#xff0c;只保留火星效果&#xff0c;可以使用顶帽子算法 图片中的火星部分正好属于比周围亮一些的斑块…

知虾皮Shopee:东南亚最受欢迎的电子商务平台

在如今数字化时代&#xff0c;电子商务平台成为人们购物的首选方式。Shopee作为东南亚地区最受欢迎的电子商务平台&#xff0c;通过其多样化的商品、便捷的购物体验和创新的商业模式&#xff0c;迅速在该地区占据了重要地位。本文将详细介绍Shopee的特点和优势&#xff0c;以及…

《作家天地》期刊投稿邮箱投稿方式

《作家天地》是国家新闻出版总署批准的正规文学刊物。对各种流派的作品兼收并蓄&#xff0c;力求题材、形式、风格多样化&#xff0c;适用于发表高品质文学学术作品&#xff0c;科研机构的专家学者以及高等院校的师生等。具有原创性的学术理论、工作实践、科研成果和科研课题及…

spug发布问题汇总记录

问题导览 1. [vite]: Rollup failed to resolve import "element-plus" from "src/main.js". 项目框架简介 vue3viteelement-plus 解决方案 - 1. 配置淘宝镜像源&#xff1a;npm config set registry https://registry.npm.taobao.org/ - 2. npm inst…

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…

Android kotlin build.gradle.kts配置

1. 添加 maven 仓库 1. 1. settings配置 1. 1.1. settings.gradle repositories {maven {url https://maven.aliyun.com/repository/public/}mavenCentral() }1. 1.2. settings.gradle.kts repositories {maven {setUrl("https://maven.aliyun.com/repository/public/…

Ubuntu 22.04/20.04 安装 SSH

OpenSSH 是安全远程通信的重要工具&#xff0c;提供了一种安全的方式来访问和管理服务器。对于那些计划在 Ubuntu 22.04 Jammy Jellyfish 或其较旧的稳定版本的 Ubuntu 20.04 Focal Fossa 上安装 SSH 并启用它的人来说&#xff0c;了解其功能和优势至关重要。 OpenSSH的主要特…

技术阅读周刊第十二期

年前最后一篇推送&#xff0c;提前祝大家新年快乐。 技术阅读周刊&#xff0c;每周更新。 历史更新 20231201&#xff1a;第八期20231215&#xff1a;第十期20231122&#xff1a;第十一期 Deno vs Go: Native hello world performance | Tech Tonic URL: https://medium.com/de…

TSINGSEE青犀智能分析网关V4视频智能分析在智慧幼儿园中的应用

一、背景需求 在科技浪潮的推动下&#xff0c;智慧化监管已然成为幼儿园管理发展的必然趋势。通过引入尖端技术手段&#xff0c;智慧幼儿园监管解决方案不仅显著提升了管理效率&#xff0c;更为孩子们的安全与健康筑起一道坚实的屏障。为了全方位守护幼儿的平安&#xff0c;幼…