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

day-42 分割字符频率相等的最少子字符串

在这里插入图片描述
思路
动态规划的思想,dp[i]表示从s[0]到s[i]这一子串的最少平衡子串数,当s[i]到s[n-1]是平衡字符串时,dp[i]=dp[j-1]+1,所以状态转换方程为dp[i]=Math.min(dp[j-1]+1)(1<=j<=i)

解题过程
判断是否为平衡字符串,利用哈希表存储存储每种字符出现的次数。为了判断快速判断所有字符出现的次数是否相等,我们可以维护所有字符出现次数的最大值 maxVal,当满足map.size()*maxVal==i-j+1,所有字符出现的次数相等。

Code

class Solution {public int minimumSubstringsInPartition(String s) {int len=s.length();int dp[]=new int[len+1];Arrays.fill(dp,Integer.MAX_VALUE);dp[0]=0;for(int i=1;i<=len;i++){Map<Character,Integer> map=new HashMap<>();int maxVal=0;for(int j=i;j>=1;j--){map.put(s.charAt(j-1),map.getOrDefault(s.charAt(j-1),0)+1);maxVal=Math.max(maxVal,map.get(s.charAt(j-1)));if(map.size()*maxVal==i-j+1&&dp[j-1]!=Integer.MAX_VALUE){//是平衡字符串dp[i]=Math.min(dp[i],dp[j-1]+1);}}}return dp[len];}
}作者:菜卷
链接:https://leetcode.cn/problems/minimum-substring-partition-of-equal-character-frequency/solutions/2896070/fen-ge-zi-fu-pin-lu-xiang-deng-de-zui-sh-v1yo/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

http://www.mrgr.cn/news/13293.html

相关文章:

  • 怎么生成一个springboot的项目
  • Vue:组件化开发
  • 11 索引
  • 290. 单词规律【 力扣(LeetCode) 】
  • RAG与LLM原理及实践(14)---- Python + MinIO + Kafka进阶
  • 在英伟达,你既能成为百万富翁,也能被“折磨”
  • bash 脚本的执行方式
  • MATLAB 低版本Matlab-读取LAS格式点云文件并可视化(78)
  • 功能测试常用的测试用例大全
  • Java设计模式之原型模式详细讲解和案例示范
  • 开发日志:表单解析 LeipiFormDesign
  • 【openpyxl-驯化】一文搞懂python是如何将文本、图片写入到execl中的技巧
  • 嵌入式学习day34
  • 【奇某信-注册/登录安全分析报告】
  • 数据实体类主键使用UUID生成策略
  • 每日刷力扣SQL题(七)
  • iPhone不停重启怎么办?全面解析与解决方案
  • 【html+css 绚丽Loading】000022 三元循环轮
  • 软件开发最佳实践:接口设计、自测与效率提升
  • Spring 源码解读:逐步实现 IoC 容器,深入理解 Spring 核心原理