LeetCode周赛384 题解

AK

第 384 场周赛 - 力扣(LeetCode)


前两题都是签到,      略。 

第三题: 回文字符串的最大数量 

1、题意:

给定一个字符串数组,总字符数量不超过1e6, 可以交换其中的任意两个字符,问能构造最多几个回文字符串。


2、题解:

首先我们要知道,无论怎么交换,字符数组内的各个字符串的长度不能发生改变,只是原来的字符布局发生了改变,那我们不妨先将所有的字符拿出来然后依次发出去,问题此时转化为了怎么分配字符使得回文字符串最多,考虑一个字符串,他需要的字符数量一定是len / 2对一样的字符,所以我们直接根据字符串长度对数组排序,优先分配给长度较小者,那如果它的长度是奇数呢,我们也直接借一位,将代价留给最后一个字符串,因为它的变成回文串最难,代价最高。
 

3、代码 (C++):
class Solution {
public:int maxPalindromesAfterOperations(vector<string>& words) {map<char, int> mp; vector<int> us; for(int i = 0; i < words.size(); i ++ )     for(auto c : words[i]) mp[c] ++; int r = 0;for(auto t : mp) r += (t.second / 2); for(int i = 0; i < words.size(); i ++ ) us.push_back(words[i].size()); sort(us.begin(), us.end()); int ans = 0; for(int i = 0; i < us.size(); i ++ ) {int o = us[i] / 2;if(o <= r) r -= o, ans ++; }return ans; }
};

第四题:匹配模式的子数组数目2

1、题意:


 
2、题解:

数据范围相对于签到题变大了,我们不妨先预处理出来 i <= n - 1元素与前一个元素的大小关系划分1, -1, 0的,因为也就三种值,我们不妨规定一种映射0:{a}, 1: {b}, -1:{c},此时两个数组都变成了字符串,问题转化成了字符串匹配的问题,我们不妨对两个字符串进行哈希,边遍历i < n - m的位置边比较哈希值,最后得到答案。

3、代码(C++)
 
class Solution {
public:int countMatchingSubarrays(vector<int>& nums, vector<int>& pattern) {int n = nums.size(), m = pattern.size(); const int N = n + 2; unsigned long long p1[N], h1[N], p2[N], h2[N]; int P = 131; map<int, char> mp;mp[0] = 'a', mp[1] = 'b', mp[-1] = 'c'; string a, b; for(int i = 0; i < pattern.size(); i ++ ) a += mp[pattern[i]];for(int i = 0; i < n - 1; i ++ ) if(nums[i] < nums[i + 1]) b += mp[1]; else if(nums[i] > nums[i + 1]) b += mp[-1]; else b += mp[0]; p1[0] = 1; for(int i = 1; i <= n - 1; i++ ) {p1[i] = p1[i-1] * P;    h1[i] = h1[i-1] * P + b[i - 1]; }p2[0] = 1; for(int i = 1; i <= m; i++ ) {p2[i] = p2[i-1] * P;    h2[i] = h2[i-1] * P + a[i - 1];  }        int ans = 0; for(int i = 0; i < n - m; i ++ ) {int l = i + 1, r = i + m;unsigned long long x = h1[r] - h1[l - 1] * p1[r - l + 1];l = 1, r = m; unsigned long long y = h2[r] - h2[l - 1] * p2[r - l + 1];if(x == y) ++ ans; }return ans; }
};

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

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

相关文章

Java图形化界面编程—— ImageIO 笔记

2.8.4 ImageIO的使用 在实际生活中&#xff0c;很多软件都支持打开本地磁盘已经存在的图片&#xff0c;然后进行编辑&#xff0c;编辑完毕后&#xff0c;再重新保存到本地磁盘。如果使用AWT要完成这样的功能&#xff0c;那么需要使用到ImageIO这个类&#xff0c;可以操作本地磁…

二、ClickHouse简介

ClickHouse简介 前言一、行式存储二、DBMS功能三、多样化引擎四、高吞吐写入能力五、数据分区与线程级并行六、场景七、特定版本 前言 ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用 C 语言编写&#xff0c;主要…

Ubuntu Desktop - Terminal 输出全部选中 + 复制

Ubuntu Desktop - Terminal 输出全部选中 复制 1. Terminal2. Terminal 最大化3. Edit -> Select All4. Copy & PasteReferences 1. Terminal 2. Terminal 最大化 3. Edit -> Select All 4. Copy & Paste Edit -> Copy or Shift Ctrl C Edit -> Paste…

数据库管理-第150期 Oracle Vector DB AI-02(20240212)

数据库管理150期 2024-02-12 数据库管理-第150期 Oracle Vector DB & AI-02&#xff08;20240212&#xff09;1 LLM2 LLM面临的挑战3 RAG4 向量数据库LLM总结 数据库管理-第150期 Oracle Vector DB & AI-02&#xff08;20240212&#xff09; 作者&#xff1a;胖头鱼的鱼…

SHA-512在Go中的实战应用: 性能优化和安全最佳实践

SHA-512在Go中的实战应用: 性能优化和安全最佳实践 简介深入理解SHA-512算法SHA-512的工作原理安全性分析SHA-512与SHA-256的比较结论 实际案例分析数据完整性验证用户密码存储数字签名总结 性能优化技巧1. 利用并发处理2. 避免不必要的内存分配3. 适当的数据块大小总结 与其他…

通过QT制作一个模仿微信主界面的界面(不要求实现具体通信功能)

main.cpp #include "widget.h" #include "second.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();//实例化第二个界面Second s;QObject::connect(&w, &Widget::my_jump, &…

Python绘制折线图、散点图...Pyplot库功能使用示例大全

matplotlib.pyplot库功能使用示例&#xff0c;Python绘制折线图、散点图... 1、简单折线图示例2、设置中文字符&#xff0c;解决乱码问题3、添加标记格式4、添加y值标记5、添加图例6、设置字体大小7、设置坐标轴起点数值8、绘制多条折线9、散点图基础示例 matplotlib.pyplot库是…

Acwing---839. 模拟堆

模拟堆 1.题目2.基本思想3.代码实现 1.题目 维护一个集合&#xff0c;初始时集合为空&#xff0c;支持如下几种操作&#xff1a; I x&#xff0c;插入一个数 x&#xff1b;PM&#xff0c;输出当前集合中的最小值&#xff1b;DM&#xff0c;删除当前集合中的最小值&#xff08…

[2-远程开发-01]idea远程连接开发

背景 因为本次的项目使用到一些网络相关的库只在linux可使用&#xff0c;项目本身也会在linux运行&#xff0c;而且如果在mac上进行开发的话&#xff0c;也涉及到部署的问题&#xff0c;而且也不能调试。 所以直接在本专栏第一篇的centos主机上进行开发&#xff0c;以远程连接…

【数据结构】14 队列(带头结点的链式存储和顺序存储实现)

定义 队列是一个有序线性表&#xff0c;但是队列的插入、删除操作是分别在线性表的两个不同端点进行的。 设一个队列 Q ( a 1 , a 2 , . . . , a n ) Q (a_1, a_2,...,a_n) Q(a1​,a2​,...,an​)&#xff0c;那么 a 1 a_1 a1​被称为队头元素&#xff0c; a n a_n an​为队…

视觉开发板—K210自学笔记(五)

本期我们来遵循其他单片机的学习路线开始去用板子上的按键控制点亮LED。那么第一步还是先知道K210里面的硬件电路是怎么连接的&#xff0c;需要查看第二节的文档&#xff0c;看看开发板原理图到底是按键是跟哪个IO连在一起。然后再建立输入按键和GPIO的映射就可以开始变成了。 …

Vue核心基础5:数据监测、收集表单数据、过滤器

1 数据监测 【代码】 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>总结</title><scrip…