Leetcode - 112双周赛

一,2839. 判断通过操作能否让字符串相等 I

 该题的题意就是看 单数下标 和 偶数下标的 s1 和 s2 中的字母及其数量是否相等。

代码如下(也可以使用哈希表来做):

class Solution {public boolean canBeEqual(String s1, String s2) {int[] a = new int[26];//统计偶数下标int[] b = new int[26];//统计奇数下标for(int i=0; i<s1.length(); i+=2){a[s1.charAt(i)-'a']++;a[s2.charAt(i)-'a']--;if(i+1 < s1.length()){b[s1.charAt(i+1)-'a']++;b[s2.charAt(i+1)-'a']--;} }for(int i=0; i<26; i++){if(a[i]!=0 || b[i]!=0)return false;}return true;}
}


二,2840. 判断通过操作能否让字符串相等 II

 这题和上面那题是一个意思,直接复用上面的代码就行,改都不用改,这里就不在写了。


 三,2841. 几乎唯一子数组的最大和

 该题一看就是一道滑动窗口的题目,要找的是长度为 k 的子数组并且子数组中有 >= m 个不同的值,求满足上述条件的子数组中,最大子数组和。

代码如下:

class Solution {public long maxSum(List<Integer> nums, int m, int k) {long ans = 0;long cur = 0;Map<Integer,Integer> map = new HashMap<>();for(int i=0; i<nums.size(); i++){cur += nums.get(i);map.put(nums.get(i),map.getOrDefault(nums.get(i),0)+1);if(i >= k-1){//子数组长度已满if(map.size() >= m){ans = Math.max(ans,cur);}int out = i - k + 1;//要滑出去的下标int val = map.get(nums.get(out));if(val == 1){map.remove(nums.get(out));}else{map.put(nums.get(out),val-1);}cur -= nums.get(out);}}return ans;}
}

四,2842. 统计一个字符串的 k 子序列美丽值最大的数目

 这道题题目很长,我们先举几个例子来理解一下:

1.  k = 1,s = "aabbbc"

        ans = 3

2.  k = 1,s = "aaabbb"

        ans = 3^k*C(2,k) = 6

3.  k = 2, s = "aaabbb"

        ans = 2*3 = 6 

        //乘法原理

4.  k = 2, s = "aaabbbccc"

        ans = 3^k*C(3,k)        

        //C(3,k)实际就是从a,b,c中选两个有多少选法,就是数学中的排列组合 

5.  k = 4, s = "aabbbccdd"

        先选择b,ans = 3,k -= 1

        然后变成 k = 3,s = "aaccdd"

        ans = ans * 2^3 * C(3,3) 

根据上面举的例子可知,我们需要知道:

        1. 每个字母的出现次数

        2. 出现次数相同的字母个数

        3. 按照出现次数从大到小枚举

class Solution {private static final long MOD = (long) 1e9 + 7;/**TreeMap中存储是有顺序的!!!TreeMap使用Map.entrySet()是从小到大输出的!!!HashMap使用Map.entrySet()是随机输出的!!!*/public int countKSubsequencesWithMaxBeauty(String s, int k) {int[] cnt = new int[26];for(int i=0; i<s.length(); i++){cnt[s.charAt(i)-'a']++;//统计每个字母的出现次数}Map<Integer,Integer> map = new TreeMap<>();for(int x : cnt){if(x > 0)//TreeMap是从小到大存储数据,我们要从大到小枚举,因此存-x,取-xmap.put(-x,map.getOrDefault(-x,0)+1);}//aaabbbcccddd//<3,4>//<出现次数,出现次数相同的字母有几个>long ans = 1;for(Map.Entry<Integer,Integer> entry : map.entrySet()){int key = -entry.getKey();//出现次数int value = entry.getValue();//出现次数相同的字母有几个if(value >= k)return (int)(ans*pow(key,k)%MOD*comb(value,k)%MOD);//key^k*C(value,k)ans = ans*pow(key,value)%MOD;k -= value;}return 0;}long pow(long x, int n){//快速幂算法 x^nlong res = 1;while(n != 0){if(n%2 != 0){res = res*x%MOD;}x = x*x%MOD;n/=2;}return res;}long comb(long n, int k){//数学中的组合排序算法 C(n,k)long res = n;for(int i=2; i<=k; i++){res = res*(--n)/i;}return res%MOD;}
}

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

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

相关文章

【Redis】深入探索 Redis 的数据类型 —— 字符串 string

文章目录 前言一、string 类型的操作命令设置和获取相关命令1. SET 和 GET2. MSET 和 MGET3. SETNX、SETEX、SETPX 计数相关命令1. INCR 和 INCRBY2. DECR 和 DECRBY3. INCRBYFLOAT 字符串操作相关命令1. APPEND2. GETRANGE3. SETRANGE4. STRLEN string 相关命令总结 二、strin…

2023数学建模国赛E题黄河水沙监测数据分析完整代码分析+处理结果+思路文档

已经写出国赛E题黄河水沙监测数据分析完整代码分析处理结果思路分析&#xff08;30页&#xff09;&#xff0c;包括数据预处理、数据可视化&#xff08;分组数据分布图可视化、相关系数热力图可视化、散点图可视化&#xff09;、回归模型&#xff08;决策树回归模型、随机森林回…

算法刷题记录-双指针/滑动窗口(LeetCode)

809. Expressive Words 思路 根据题目描述&#xff0c;我们可以知道&#xff0c;如果要将某个单词定义为可扩张&#xff08;stretchy&#xff09;&#xff0c;需要满足如下两个条件&#xff1a; 所以&#xff0c;我们在实现的时候&#xff0c;可以通过两个指针p1和p2&#x…

QTableView通过setColumnWidth设置了列宽无效的问题

在用到QT的QTableView时&#xff0c;为了显示效果&#xff0c;向手动的设置每一列的宽度&#xff0c;但是如下的代码是无效的。 ui->tableView->setColumnWidth(0,150);ui->tableView->setColumnWidth(1,150);ui->tableView->setColumnWidth(2,150);ui->t…

OpenCV(二十九):图像腐蚀

1.图像腐蚀原理 腐蚀操作的原理是将一个结构元素&#xff08;也称为核或模板&#xff09;在图像上滑动&#xff0c;并将其与图像中对应位置的像素进行比较。如果结构元素的所有像素与图像中对应位置的像素都匹配&#xff0c;那么该位置的像素值保持不变。如果结构元素的任何一个…

WireShark抓包工具的安装

1.下载安装包 在官网或者电脑应用商城都可以下载 2.安装 打开安装包&#xff0c;点击next 点击next 选择UI界面&#xff0c;两种都装上 根据习惯选择 选择安装位置点击安装 开始安装安装成功

【python爬虫】14.Scrapy框架讲解

文章目录 前言Scrapy是什么Scrapy的结构Scrapy的工作原理 Scrapy的用法明确目标与分析过程代码实现——创建项目代码实现——编辑爬虫代码实现——定义数据代码实操——设置代码实操——运行 复习 前言 前两关&#xff0c;我们学习了能提升爬虫速度的进阶知识——协程&#xf…

Android逆向学习(番外一)smali2java部分文件无法反编译的bug与修复方法

Android逆向学习&#xff08;番外一&#xff09;smali2java部分文件无法反编译的bug与修复方法 一、前言 昨天我和往常一样准备着android逆向&#xff08;四&#xff09;的博客&#xff0c;结果发现smali2java对某些文件无法进行逆向&#xff0c;我不知道windows会不会产生这…

ajax实现百度一下模糊查询功能

1、效果 如下图所示&#xff0c;我们在输入大学时&#xff0c;程序会到后端查询名字中包含大学的数据&#xff0c;并展示到前端页面。 用户选择一个大学&#xff0c;该大学值会被赋值到input表单&#xff0c;同时关闭下拉表单&#xff1b; 当页面展示的数据都不符合条件时&…

计算机视觉领域经典模型汇总(2023.09.08

一、RCNN系列 1、RCNN RCNN是用于目标检测的经典方法&#xff0c;其核心思想是将目标检测任务分解为两个主要步骤&#xff1a;候选区域生成和目标分类。 候选区域生成&#xff1a;RCNN的第一步是生成可能包含目标的候选区域&#xff0c;RCNN使用传统的计算机视觉技术&#x…

2023.9.7 关于 TCP / IP 的基本认知

目录 网络协议分层 TCP/IP 五层&#xff08;四层&#xff09;模型 应用层 传输层 网络层&#xff08;互联网层&#xff09; 数据链路层&#xff08;网络接口层&#xff09; 物理层 网络数据传输的基本流程 网络协议分层 为什么需要分层&#xff1f; 分层之后&#xff0c…

linux--进程--system与popen函数

1.system #include <stdlib.h>int system(const char *command); 返回值&#xff1a; 成功&#xff0c;则返回进程的状态值&#xff1b;不能源码execl函数&#xff0c;返回127&#xff1b;失败返回-1&#xff1b; 不能成功运行分析文章&#xff1a;linux下system函数详…