【LeetCode周赛】第 389 场周赛

目录

  • 3083. 字符串及其反转中是否存在同一子字符串 简单
  • 3084. 统计以给定字符开头和结尾的子字符串总数 中等
  • 3085. 成为 K 特殊字符串需要删除的最少字符数 中等
  • 3086. 拾起 K 个 1 需要的最少行动次数 困难

3083. 字符串及其反转中是否存在同一子字符串 简单

3083. 字符串及其反转中是否存在同一子字符串

分析:
易得:当存在 长度≥2 的反转子字符串时,一定会有 长度=2 的反转子字符串,因此只需要判断长度为2的子字符串即可。

法一:直接判断。
法二:哈希表。

代码:

直接判断:

class Solution {
public:bool isSubstringPresent(string s) {int n=s.size();for(int i=0;i<n-1;i++){string str = s.substr(i,2);reverse(str.begin(), str.end());if(s.find(str)!=string::npos) return true;}return false;}
};
class Solution:def isSubstringPresent(self, s: str) -> bool:n = len(s)for i in range(n-1):if s[i:i+2] in s[::-1]:return Truereturn False

哈希表:

class Solution {
public:bool isSubstringPresent(string s) {int n = s.size();vector<long long> vis(26,0);for(int i=1;i<n;i++){int x = s[i-1]-'a', y = s[i]-'a';vis[x] |= 1<<y;// 数字中二进制位 0~25 为分别表示26个字母,对二进制位为 1,则表示 x 代表字母之后出现了该字母if(vis[y] >> x & 1) return true;} return false;}
};
class Solution:def isSubstringPresent(self, s: str) -> bool:vis = [0] * 26for x, y in pairwise(map(ord, s)):x -= ord('a')y -= ord('a')vis[x] |= 1<<yif vis[y] >> x&1:return Truereturn False


3084. 统计以给定字符开头和结尾的子字符串总数 中等

3084. 统计以给定字符开头和结尾的子字符串总数

分析:
统计给定字符在字符串中出现的次数 cnt
以该字符串开头和结尾的子字符串,即任意选择两个该字符组成的子字符串的个数。 C 2 c n t C^{cnt}_{2} C2cnt

代码:

class Solution {
public:long long countSubstrings(string s, char c) {int n=s.size();long long ans=0,cnt=0;for(int i=0;i<n;i++){if(s[i]==c){ans+=cnt;cnt++;}}return ans+cnt;}
};
class Solution {
public:long long countSubstrings(string s, char c) {int cnt=0;for(auto& t : s) if(t == c) cnt++;return 1LL*(1+cnt)*cnt/2;}
};
class Solution:def countSubstrings(self, s: str, c: str) -> int:cnt = s.count(c)return (cnt+1)*cnt//2


3085. 成为 K 特殊字符串需要删除的最少字符数 中等

3085. 成为 K 特殊字符串需要删除的最少字符数

分析:
需要得到最少删除字符数,我们反向思考,构造字符串。因为要得到最少的删除数,出现次数最少的字符,要么完全删除,要么完全保留。如果删除一部分,那么出现次数过多的也要一起删除,则不会是最少字符数。
枚举最少的字符的数量,再不断枚举其余字符的数量,构建 K特殊字符串,取最长的构造的字符串,结果即为原字符串长度 - 最长的构造的字符串的长度。

代码:

class Solution {
public:int minimumDeletions(string word, int k) {vector<int> cnt(26,0),t;int n=word.size();for(int i=0;i<n;i++) cnt[word[i]-'a']++;for(int i=0;i<26;i++) if(cnt[i]>0) t.push_back(cnt[i]);sort(t.begin(),t.end());int all = accumulate(t.begin(), t.end(), 0),ans=all;for(int i=0;i<t.size();i++){int c=t[i];for(int j=i+1;j<t.size();j++){c+=min(t[i]+k,t[j]);}ans=min(ans, all-c);}return ans;}
};
class Solution:def minimumDeletions(self, word: str, k: int) -> int:cnt,ans = [0]*26,0for i in word:cnt[ord(i) - ord('a')]+=1cnt = sorted(cnt)for i,x in enumerate(cnt):if x == 0:continuec = xfor j in cnt[i+1:]:c+=min(x+k,j)ans = max(ans,c)return sum(cnt) - ans


3086. 拾起 K 个 1 需要的最少行动次数 困难

3086. 拾起 K 个 1 需要的最少行动次数

分析:
对于获取转换后的1,至少需要两次操作(方法一+方法二)
对于获取原本就存在的1,则需要看对应下标与 i n d e x index index

注意:并非获取转换后的 1 操作数更少,设原本存在的 1 的下标为x

  • x = = i n d e x x==index x==index ,不需要操作。
  • ∣ x − i n d e x ∣ = = 1 |x - index| == 1 xindex==1,仅需要一个操作。

因此在统计时,查看是否存在连续2或者3个 1 出现,同时再看是否能通过生成 1 来获取,否则只能一点一点移动。

代码:

class Solution {
public:long long minimumMoves(vector<int>& nums, int k, int maxChanges) {int c=0, n=nums.size();vector<int> point;for(int i=0;i<n;i++){if(nums[i]==0) continue;point.push_back(i);c=max(c,1);// 至少有一个连续的 1if(i>0 && nums[i-1]==1){if(i>1 && nums[i-2]==1){c=3; // 有三个连续的 1}else{c=max(c,2); // 至少有两个连续的 1}}}c=min(c,k); // 判断 c 是否满足 k,如果 c>k,那么就不需要这么多连续的 1。if(maxChanges >= k-c){ // 在取完连续 1,后,变化操作是否满足return max(c-1,0) + (k-c)*2; // 满足的话 直接返回操作次数}int m=point.size();vector<long long> sum(m+1,0);for(int i=0;i<m;i++){sum[i+1] = sum[i] + 1LL*point[i];}int size = k-maxChanges; // 还剩下多少需要一个一个移位long long ans = LLONG_MAX;for(int r = size;r<=m;r++){int l = r-size, i=l+size/2;long long index = point[i];long long s1 = index * (i-l) - (sum[i] - sum[l]); // 将中位数 i 左边的所有 1 移位到 index 所需的操作数long long s2 = sum[r] - sum[i]-index*(r-i); // 将中位数 i 右边的所有 1 移位到 index 所需的操作数ans = min(ans, s1+s2);}return ans + maxChanges*2;}
};
class Solution:def minimumMoves(self, nums: List[int], k: int, maxChanges: int) -> int:pos = []n,c = len(nums),0for i,n in enumerate(nums):if n==0:continuec=max(c,1)pos.append(i)if i>0 and nums[i-1]==1:if i>1 and nums[i-2]==1:c=3else:c=max(c,2)c=min(c,k)if maxChanges>=k-c:return max(c-1,0) + (k-c)*2n,ans = len(pos), infpre_sum = list(accumulate(pos, initial=0))s = k - maxChangesfor r in range(s, n+1):l = r - si = l + s//2index = pos[i]s1 = (index * (i-l)) - (pre_sum[i] - pre_sum[l]) s2 = (pre_sum[r] - pre_sum[i]) - index * (r-i)ans = min(ans , s1+s2)return ans + maxChanges*2

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

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

相关文章

程序员快速自我提升法——鱼皮大佬

0 软件开发人员自我成长 1 每天读2~3篇文章&#xff0c;可以行业趋势、技术类(和自己的工作有关的) 大厂技术博客科技资讯类&#xff1a;量子位、差评、新智元、无敌信息差 量子位、新智元经验分享、编程趋势、技术干活&#xff1a;程序员鱼皮、小林coding、java guide、程序…

【推荐系统】NCF神经协同过滤

NCF框架 NCF框架是本文要实现的3个模型的主体结构。 首先是输入层&#xff0c;分别包含两个特征向量 v u v_u vu​和 v i v_i vi​&#xff0c;描述了用户u和物品i。输入仅由一个用户向量和一个物品向量构成&#xff0c;它们分别是以one-hot编码的二值化稀疏向量。 接着是Em…

[HNCTF 2022 WEEK2]e@sy_flower

获取基本信息 获取关键字符串 进来“开门红” 上一篇博客才发现这个 按u转换为二进制 有个无效db&#xff0c;最简单的花指令 nop掉 重新u一下p一下 就正常了 然后编译完main函数 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) {signed in…

机器学习算法大全(MLS-C01)

算法名字监督学习简介和用途协同过滤是推荐算法Factorization Machines algorithm否推荐算法&#xff0c;准确度更高&#xff0c;不会误打扰。KNN否利用已知样本&#xff0c;找最邻近的样本的分类算法K-means否聚类算法RCF否异常检测Latent Dirichlet Allocation否主题提取和文…

Python深度学习技术教程

原文链接&#xff1a;Python深度学习技术教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247597949&idx4&sn65c0d353d02b060fec98ec799f217ae1&chksmfa823e9acdf5b78cd71cfcb060e3b60125b17afbe3e19ef423d4709d2df7fc93d90ce3097253&token14787…

Unity InputField实现框自适应内容简便方法

要实现InputField框自适应输入内容&#xff0c;除了通过代码进行处理&#xff0c;还可以是使用以下简便的方法。 1、创建InputField组件&#xff1a;右键->UI->Input Field -TextMeshPro。 2、把Input Field Settings中的Line Type设置为Multi Line Newline模式&#x…

Jenkins + Docker + ASP.NET Core自动化部署

本来没想着要写这篇博客&#xff0c;但是在实操过程中&#xff0c;一个是被网络问题搞炸了心态&#xff08;真心感觉网络能把人搞疯&#xff0c;别人下个包、下个镜像几秒钟搞定&#xff0c;我看着我的几KB小水管真是有苦说不出&#xff09;&#xff0c;另一个就是这里面坑还是…

5. 最长回文子串

5. 最长回文子串 中等 相关标签 相关企业 提示 给你一个字符串 s&#xff0c;找到 s 中最长的回文 子串 。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;&quo…

2024.2.28 校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | OPPO流程IT团队 校招扩招 &#xff08;内推&#xff09; 校招 | OPPO流程IT团队 校招扩招 &#xff08;内推&#xff09; 2、校招 | 顺丰集团2024届春季校园招聘正式启动&#…

【Java】高级篇1:异常处理

异常&#xff1a;程序在执行过程中出现的非正常情况&#xff0c;如果不处理最终会导致JVM的非正常停止。 Java的异常抛出机制 Java异常体系 1、Throwable 2、Error和Exception 异常处理方式 1、try-catch-finally&#xff08;捕获异常&#xff09; 基本结构&#xff1a; 使用…

算法笔记p328_并查集

目录 并查集的定义并查集的基本操作初始化查找合并 路径压缩 并查集的定义 并查集是一种维护集合的数据结构&#xff0c;支持下面两个操作&#xff1a; 合并&#xff1a;合并两个集合。查找&#xff1a;判断两个元素是否在一个集合。 并查集用一个数组实现&#xff1a; int…

OpenJudge - 12:计算2的N次方

总时间限制: 1000ms 内存限制: 65536kB 描述 任意给定一个正整数N(N<100)&#xff0c;计算2的n次方的值。 输入 输入一个正整数N。 输出 输出2的N次方的值。 样例输入 5 样例输出 32 关键代码 #include<stdio.h> int main() {int n,a[51] {0},c[51] {0},count 0…

Day68:WEB攻防-Java安全原生反序列化SpringBoot攻防heapdump提取CVE

目录 Java安全-反序列化-原生序列化类函数 原生序列化类函数 SnakeYaml XMLDecoder ObjectInputStream.readObject 工具利用 ysoserial Yakit SerializedPayloadGenerator Java安全-SpringBoot框架-泄漏&CVE SpringBoot Actuator-黑白盒发现 人工识别 BurpSui…

数据库事务中“锁”的分类

数据库事务中的锁可以按照不同的维度进行分类。以下是一些常见的分类方式&#xff1a; 1、按锁的粒度分类&#xff1a; 行锁&#xff08;Row-level lock&#xff09;&#xff1a;锁定单个或少量的数据行。这种锁粒度小&#xff0c;允许高度的并发&#xff0c;但管理开销大。页…

LeetCode 2312.卖木头块:动态规划(DP)

【LetMeFly】2312.卖木头块&#xff1a;动态规划(DP) 力扣题目链接&#xff1a;https://leetcode.cn/problems/selling-pieces-of-wood/ 给你两个整数 m 和 n &#xff0c;分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices &#xff0c;其中 prices[i] [hi, …

【蓝桥杯】蓝桥杯嵌入式——题目总结及文章汇总(内含客观题与主观题,并且都附有详细题解)

介绍 蓝桥杯嵌入式比赛是一项专注于嵌入式开发的全国性比赛&#xff0c;旨在鼓励和促进嵌入式系统的研究和应用&#xff0c;提高嵌入式开发的水平和技能。 比赛分为初赛和复赛两个阶段。初赛难度适中&#xff0c;注重考查参赛选手的嵌入式系统开发能力和实践经验。复赛则采用线…

LeetCode118 杨辉三角形

题目 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]] 解…

汽车电子拓扑架构的演进过程

汽车电子拓扑架构的演进过程 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠…

TestNg @Test的expectedExceptionsMessageRegExp属性

本文将讨论TestNG中Test 注解的expectedExceptionsMessageRegExp属性。 这个属性有什么作用&#xff1f;根据文档&#xff1a; 如果指定了expectedExceptions &#xff0c;则其消息必须与此属性中指定的正则表达式匹配。 因此&#xff0c;这意味着如果不先使用expectedparam…

爬虫加密算法

js常见的加密方式 加密在前端开发和爬虫中是经常遇见的。掌握了加密算法且可以将加密的密文进行解密破解的&#xff0c;也是你从一个编程小白到大神级别质的一个飞跃。且加密算法的熟练和剖析也是很有助于帮助我们实现高效的js逆向。下述只把我们常用的加密方法进行总结。不去深…