LeetCode---385周赛

题目

3042. 统计前后缀下标对 I

3043. 最长公共前缀的长度

3044. 出现频率最高的质数

3045. 统计前后缀下标对 II

一、最长公共前缀的长度

这题可以用字典树来做。

这里简单介绍一下字典树,顾名思义,这是用来存放单词的树,如何存???如下图

 (上面对字典树的介绍只是方便大家理解,要想有更深入的了解可以去自行查看文档)

当然字典树不仅仅只能用来存放字符串,它是一种思想的体现,放在这题,我们同样可以将数字每一位拆开来存放进这样一棵树中。同时这题不是查看数字是否出现在字典树中,所以Node结构体没必要有bool end这个变量。

代码如下

struct Node{Node* son[10]={0};
};class Solution {
public:int longestCommonPrefix(vector<int>& arr1, vector<int>& arr2) {int n=arr1.size(),m=arr2.size();//用arr1构造字典树Node* root = new Node();for(auto x:arr1){Node*cur=root;string s=to_string(x);for(auto e:s){if(cur->son[e-'0']==nullptr)cur->son[e-'0']=new Node();cur=cur->son[e-'0'];}}//找最大公共前缀int ans=0;for(auto x:arr2){Node*cur=root;string s=to_string(x);int res=0;for(auto e:s){if(cur->son[e-'0']){cur=cur->son[e-'0'];res++;}else{break;}}ans=max(res,ans);}return ans;}
};

总结:字典树可以用来解决前缀/后缀匹配的问题(不仅限于字符串),同时字典树的结点中的数据可以根据自己的需要进行改变

二、出现频率最高的质数

这题只要读懂题意,然后直接模拟即可,对质数的判断也可以直接暴力,代码如下

class Solution {const int dir[8][2]={0,1, 0,-1, 1,0, -1,0, 1,1, -1,-1, 1,-1, -1,1};
public:bool is_prime(int x){for(int i=2;i<=sqrt(x);i++){if(x%i==0)return false;}return true;}int mostFrequentPrime(vector<vector<int>>& mat) {int n = mat.size(), m = mat[0].size();unordered_map<int,int>mp;for(int i=0;i<n;i++){for(int j=0;j<m;j++){for(int k=0;k<8;k++){int x=i,y=j;int dx=dir[k][0],dy=dir[k][1];int val = 0;while(x>=0&&x<n&&y>=0&&y<m){val=val*10+mat[x][y];if(val>10&&is_prime(val))mp[val]++;x+=dx;y+=dy;}}}}int mx=0,val=-1;for(const auto&[v,c]:mp){if(mx==0) mx=c,val=v;else if(mx<c) mx=c,val=v;else if(mx==c&&val<v) val=v;}return val;}
};

三、统计前后缀下标对I&II

第一题由于数据范围小,我们可以直接暴力枚举所有可能的组合即可,代码如下

class Solution {
public:int countPrefixSuffixPairs(vector<string>& words) {int n=words.size(),ans=0;for(int j=0;j<n;j++){for(int i=j-1;i>=0;i--){if(words[i].size()<=words[j].size()&&words[i]==words[j].substr(0,words[i].size())&&words[i]==words[j].substr(words[j].size()-words[i].size()))ans++;}}return ans;}
};

但是在第四题的数据范围变大了,我们又该如何去做???

我们依旧可以用字典树来做,只不过从单一的匹配前缀/后缀,到现在的前后缀都需要匹配。那么我们该如何去修改字典树,或者添加什么算法去辅助字典树去完成这项工作呢???

1、修改字典树---将前缀字典树和后缀字典树结合起来,即将判断前缀和判断后缀是否相等的元素组合成一个pair进行比较,举个例子:

struct Node{unordered_map<int,Node*>mp;int cnt = 0;//记录以该节点为结尾的字符串的个数
};class Solution {
public:long long countPrefixSuffixPairs(vector<string>& words) {long long ans = 0;Node*root=new Node();for(const auto& s:words){int n=s.size();Node*cur=root;for(int i=0;i<n;i++){int flag=s[i]<<8|s[n-1-i];//将两个字符hash,这样就不用存pair类型了if(cur->mp.count(flag)==0)cur->mp[flag]=new Node();cur=cur->mp[flag];ans += cur->cnt;}cur->cnt++;}return ans;}
};

2、字典树+z函数----利用z函数的性质,有兴趣可以看看

struct Node{Node* son[26]={0};int cnt = 0;
};class Solution {
public:long long countPrefixSuffixPairs(vector<string>& words) {long long ans = 0;Node*root=new Node();for(const auto& s:words){int n=s.size();vector<int>z(n);z[0]=n;int l=0,r=0;for(int i=1;i<n;i++){if(i<=r) z[i]=min(r-i+1,z[i-l]);while(i+z[i]<n&&s[i+z[i]]==s[z[i]]) z[i]++;if(i+z[i]-1>r) l=i,r=i+z[i]-1;}Node*cur=root;for(int i=0;i<n;i++){if(cur->son[s[i]-'a']==nullptr)cur->son[s[i]-'a']=new Node();cur=cur->son[s[i]-'a'];if(z[n-1-i]==i+1)ans += cur->cnt;}cur->cnt++;}return ans;}
};

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

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

相关文章

Spring 手动实现Spring底层机制

目录 一、前言 二、Spring底层整体架构 1.准备工作 : 2.架构分析 : &#xff08;重要&#xff09; 3.环境搭建 &#xff1a; 三、手动实现Spring容器结构 1.自定义注解 : 1.1 Component注解 1.2 Scope注解 2.自定义组件 : 3.自定义用于封装Bean信息的BeanDefinition类&a…

AI生成图片网站测评

主要测评文章配图生成效果、绘制logo等效果 测评关键点&#xff1a;生成效果、网站易用度、是否免费 测评prompt&#xff1a;请生成一个文章内容配图&#xff0c;图片比例是3&#xff1a;2&#xff0c;文章主旨是AI既是机遇&#xff0c;也存在挑战和风险&#xff0c;要求图片…

Linux-基础知识(黑马学习笔记)

硬件和软件 我们所熟知的计算机是由&#xff1a;硬件和软件组成。 硬件&#xff1a;计算机系统中电子&#xff0c;机械和光电元件等组成的各种物理装置的总称。 软件&#xff1a;是用户和计算机硬件之间的接口和桥梁&#xff0c;用户通过软件与计算机进行交流。 而操作系统…

SWIFT:自我认知微调

文档:https://github.com/modelscope/swift/blob/main/docs/source/LLM/%E8%87%AA%E6%88%91%E8%AE%A4%E7%9F%A5%E5%BE%AE%E8%B0%83%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.md ​​​​​​代码: Swift是如何把自我认知数据集融合到训练集中呢? 1:相关的3个参数

5.2.鸿蒙LiteOS-M los_dispatch

目录 一、cortex-m4 los_dispatch.S代码分析坚持就有收获 一、cortex-m4 los_dispatch.S代码分析 .syntax unified #.syntax [unified | divided], 指定arm 汇编语法规则 .arch armv7e-m #指定平台, 与命令行参数-march同样的作用 .fpu fpv4-sp-d16 #指定浮点运算…

七.把opencv库集成到QT5创建的窗体项目中

1.安装opencv 命令&#xff1a;mingw32-make install 2.新建项目 opencvDemo1 然后点击【下一步】&#xff0c;选择qmake&#xff0c;完成工程的创建 3.添加opencv 库文件 在pro工程文件中加入如下库文件路径

Python爬虫-报错requests.exceptions.SSLError: HTTPSConnectionPool

在学习python爬虫&#xff0c;在公司运行代码没有问题&#xff0c;但是下班回来把代码拉下来运行&#xff0c;却出现问题。 问题&#xff1a; requests.exceptions.SSLError: HTTPSConnectionPool(host‘campusgateway.51job.com’, port443): Max retries exceeded with url…

C++的map/multimap容器->基本概念、构造和赋值、大小和交换、插入和删除、查找和统计、容器排序

#include<iostream> using namespace std; #include <map> //map容器 构造和赋值 void printMap(map<int,int>&m) { for (map<int, int>::iterator it m.begin(); it ! m.end(); it) { cout << "key " <&l…

Vue2响应式原理分析(数据代理与数据劫持)

综述&#xff1a; 我们都知道&#xff0c;每个Vue的应用都是通过new一个Vue构造函数从而创造出来一个vm实例对象&#xff0c;el&#xff08;elect&#xff09;配置项为通过id选择器#root选择index页面中的根dom元素进行绑定&#xff0c;data配置项则为vue模板中用到的源数据。 …

C语言-数组指针与指针数组

一、简介 对于使用C语言开发的人来说&#xff0c;指针&#xff0c;大家都是非常熟悉的。数组&#xff0c;大家也同样熟悉。但是这两个组合到一起的话&#xff0c;很多人就开始蒙圈了。这篇文章&#xff0c;就详细的介绍一下这两个概念。 指针数组和数组指针&#xff0c;听起来非…

【服务器数据恢复】通过reed-solomon算法恢复raid6数据的案例

服务器数据恢复环境&#xff1a; 一台网站服务器中有一组由6块磁盘组建的RAID6磁盘阵列&#xff0c;操作系统层面运行MySQL数据库和存放一些其他类型文件。 服务器故障&#xff1a; 该服务器在工作过程中&#xff0c;raid6磁盘阵列中有两块磁盘先后离线&#xff0c;不知道是管理…

在Linux操作系统的ECS实例上安装hadoop

目录 1. java(jdk)2. Hadoop3. 配置文件4. 启动Hadoop服务&#xff08;搭建伪分布式环境&#xff09; 1. java(jdk) yum list java* &#xff1a;列出所有名称中包含“java”字样的软件包yum install java-1.8.0-openjdk.x86_64&#xff1a;选择自己想要的版本。这里我选择jav…

DataGrip 2023:让数据库开发变得更简单、更高效 mac/win版

JetBrains DataGrip 2023是一款功能强大的数据库IDE&#xff0c;专为数据库开发和管理而设计。通过DataGrip&#xff0c;您可以连接到各种关系型数据库管理系统(RDBMS)&#xff0c;并使用其提供的一组工具来查询、管理、编辑和开发数据库。 DataGrip 2023 软件获取 DataGrip 2…

分散的产品开发团队

分散的产品开发团队指的是各个团队或成员在地理位置上分布在不同地方&#xff0c;通过互联网和现代通讯技术进行协作和沟通&#xff0c;以共同完成产品开发任务的团队模式。 这种团队模式的优势在于可以充分利用各地的人才资源&#xff0c;降低团队的管理和协作成本&#xff0…

【Ubuntu】使用WSL安装Ubuntu

WSL 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能&#xff0c;可用于在 Windows 计算机上运行 Linux 环境&#xff0c;而无需单独的虚拟机或双引导。 WSL 旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。安装 Linux 发行版时&#xff0c…

云HIS系统源码,基于云计算技术的B/S架构的云HIS系统,二甲医院信息管理系统

云HIS系统源码&#xff0c;采用云端SaaS服务的方式提供 基于云计算技术的B/S架构的云HIS系统&#xff0c;采用云端SaaS服务的方式提供&#xff0c;使用用户通过浏览器即能访问&#xff0c;无需关注系统的部署、维护、升级等问题&#xff0c;系统充分考虑了模板化、配置化、智能…

vscode + wsl2 + xmake快速构建c语言编译调试环境

前言 使用这一套是我觉得最方便的&#xff0c;wsl2使得我可以不用脱离windows&#xff0c;且无需安装庞大且臃肿虚拟机。vscode让我可以更加方便快捷的编辑代码&#xff0c;而xmake是一站式的工程构建工具且作者就是中国人文档啥的群啥的都是中文&#xff0c;比起cmake makefi…

python统计分析——线性模型的预测和评估

参考资料&#xff1a;用python动手学统计学 1、导入库 # 导入库 # 导入数据处理的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 导入绘图的库 from matplotlib import pyplot as plt import seaborn as sns sns.set() # 导入估计…

BERT学习笔记

论文&#xff1a;《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》&#xff0c;2019 代码&#xff1a;[tensorflow]&#xff0c;[pytorch] 来源&#xff1a;李沐精度BERT 0、摘要 与之前模型的区别&#xff1a; GPT考虑的是一个单向…

OLTP、OLAP与HTAP、HSAP详解

HTAP、HSAP是OLAP与OLTP综合需求驱动下的新的数据库系统&#xff0c;既满足事务处理&#xff0c;又满足大规模分析查询&#xff0c;并且是基于一套系统下实现。 本节首先我们要了解服务于分析的区别。相当多从应用角度对数据处理分类的划分&#xff0c;大致可以分为Transactio…