当前位置: 首页 > news >正文

Leetcode 3003. Maximize the Number of Partitions After Operations

  • Leetcode 3003. Maximize the Number of Partitions After Operations
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:10038. Maximize the Number of Partitions After Operations

1. 解题思路

这一题我看实际比赛当中只有72个人做出来,把我吓得够呛,还以为会很难,不过实际做了之后发现其实挺简单的,不知道啥情况……

思路上来说,这道题还是动态规划的思路,要考虑能够分割的partition的最大数目,我们只需要考察每一位上的字符是否需要发生变化以及变化前后分割数目的变化即可。

显然,如果一个字符在当前的partition当中没有出现过,那么这个字符显然不需要进行变化,因为不会因此而产生额外的收益。

而如果该字符在当前partition当中已经出现过,但是变化的次数已经过了,那么我们同样不需要进行考虑,只能顺序进行partition的切分看看能分割成多少个partition。

而如果该字符在当前partition当中已经出现过,且变换的机会还没使用,我们就要遍历一下将其变换成所有当前partition当中还未出现过的字符以及保留变换机会不在此进行变换的情况下能够获得的partition的最大值返回即可。

而关于当前partition当中已出现过哪些字符,我们可以用一个int值来记录一下各个字符是否已经有出现过。

此时,总的时间复杂度就是 O ( 26 × 2 × N ) O(26 \times 2 \times N) O(26×2×N)

2. 代码实现

给出python代码实现如下:

class Solution:def maxPartitionsAfterOperations(self, s: str, k: int) -> int:if len(set(s)) < k or k == 26:return 1n = len(s)@lru_cache(None)def dp(idx, change, status):if idx >= n:return 0 if status == 0 else 1loc = ord(s[idx]) - ord('a')if status & (1<<loc) == 0:if Counter(bin(status))["1"] == k:return 1 + dp(idx, change, 0)else:return dp(idx+1, change, status | (1<<loc))else:ans = dp(idx+1, change, status)if change > 0:if Counter(bin(status))["1"] == k:for i in range(26):if status & (1 << i) == 0:ans = max(ans, 1 + dp(idx+1, change-1, 1 << i))else:for i in range(26):if status & (1 << i) == 0:ans = max(ans, dp(idx+1, change-1, status | (1 << i)))return ansreturn dp(0, 1, 0)

提交代码评测得到:耗时719ms,占用内存119.8MB。

http://www.lryc.cn/news/275645.html

相关文章:

  • MySQL第一讲:MySQL知识体系详解(P6精通)
  • 逻辑回归简单案例分析--鸢尾花数据集
  • Python print 高阶玩法
  • Wpf 使用 Prism 实战开发Day09
  • 网络端口(包括TCP端口和UDP端口)的作用、定义、分类,以及在视频监控和流媒体通信中的定义
  • flink如何写入es
  • Java、Python、C++和C#的界面开发框架和工具的重新介绍
  • Java二叉树的遍历以及最大深度问题
  • Apollo 9.0搭建问题记录
  • 【心得】PHP文件包含高级利用攻击面个人笔记
  • [scala] 列表常见用法
  • python 使用urllib3发起post请求,携带json参数
  • 深入理解堆(Heap):一个强大的数据结构
  • 抖音在线查权重系统源码,附带查询接口
  • Spring Framework和SpringBoot的区别
  • 2024--Django平台开发-Django知识点(三)
  • Github 2024-01-08开源项目周报 Top14
  • vue3 的内置组件汇总
  • ARM工控机Node-red使用教程
  • Visual Studio 发布程序自动更新 ClickOnce和AutoUpdater测试
  • Codeforces Round 761 (Div. 2) E. Christmas Chocolates(思维题 树的直径 二进制性质 lca)
  • 知识图谱之汽车实战案例综述与前瞻分析
  • 网关Gateway
  • java 生成一个当前时间的时间搓
  • 金融中IC和IR的定义
  • Git(2):Git环境的安装
  • Pytest单元测试系列[v1.0.0][pytest插件常用技巧]
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第五天-Linux消息共享内存练习题(物联技术666)
  • 04set注入专题/简单类型/数组/List/Set/Map/空字符串/null/特殊符号
  • Linux引导和服务管理