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

【Leetcode 每日一题】1278. 分割回文串 III

问题背景

给你一个由小写字母组成的字符串 s s s,和一个整数 k k k
请你按下面的要求分割字符串:

  1. 首先,你可以将 s s s 中的部分字符修改为其他的小写英文字母。
  2. 接着,你需要把 s s s 分割成 k k k 个非空且不相交的子串,并且每个子串都是回文串。

请返回以这种方式分割字符串所需修改的最少字符数。

数据约束

  • 1 ≤ k ≤ s . l e n g t h ≤ 100 1 \le k \le s.length \le 100 1ks.length100
  • s s s中只含有小写英文字母。

解题过程

这题和 分割回文串 II 非常相似,看起来要求非常复杂,实际上也可以拆成两个都能用动态规划思想来解决的问题。

具体实现

class Solution {
    public int palindromePartition(String s, int k) {
        int n = s.length();
        int[][] changeMemo = new int[n][n];
        for (int[] row : changeMemo) {
            Arrays.fill(row, -1);
        }
        int[][] dfsMemo = new int[k][n];
        for (int[] row : dfsMemo) {
            Arrays.fill(row, -1);
        }
        return dfs(k - 1, n - 1, s.toCharArray(), dfsMemo, changeMemo);
    }

    private int dfs(int i, int right, char[] chS, int[][] dfsMemo, int[][] changeMemo) {
        if (i == 0) {
            return minChange(0, right, chS, changeMemo);
        }
        if (dfsMemo[i][right] != -1) {
            return dfsMemo[i][right];
        }
        int res = Integer.MAX_VALUE;
        for (int left = i; left <= right; left++) {
            res = Math.min(res, dfs(i - 1, left - 1, chS, dfsMemo, changeMemo) + minChange(left, right, chS, changeMemo));
        }
        return dfsMemo[i][right] = res;
    }

    private int minChange(int i, int j, char[] chS, int[][] changeMemo) {
        if (i >= j) {
            return 0;
        }
        if (changeMemo[i][j] != -1) {
            return changeMemo[i][j];
        }
        int res = minChange(i + 1, j - 1, chS, changeMemo);
        if (chS[i] != chS[j]) {
            res++;
        }
        return changeMemo[i][j] = res;
    }
}

相关文章:

  • SpringBoot系列之Spring AI+DeekSeek创建AI应用
  • 【每日八股】计算机网络篇(二):TCP 和 UDP
  • 虚拟机配置
  • ThreadLocal的Key是弱引用给垃圾回收带来的问题
  • 深入探究Python机器学习算法:无监督学习(聚类算法如 K-Means、DBSCAN,降维算法如 PCA、SVD)
  • 每日一题之宝石组合
  • Docker + Vue2 热重载:为什么需要 CHOKIDAR_USEPOLLING=true?
  • 健康饮食,健康早餐
  • 低功耗抄表方案-支持Modbus、DL/T645 及 DL/T698 协议‌电表
  • 简易的微信聊天网页版【项目测试报告】
  • Spring Boot 自动装配深度解析与实践指南
  • Libgdx游戏开发系列教程(2)——接水滴游戏实现
  • 知识周汇|SAP脚本自动化-淋过雨的人更懂得伞的价值
  • Elasticsearch:解锁深度匹配,运用Elasticsearch DSL构建闪电般的高效模糊搜索体验
  • CentOS 7 中安装 Docker和Docker Compose
  • 实战 Elasticsearch:快速上手与深度实践-2.2.3案例:电商订单日志每秒10万条写入优化
  • 基于OFDR的层压陆相页岩油储层中非对称裂缝群传播的分布式光纤监测
  • 可终身授权的外国工具,不限次数使用!PDF转CAD的软件
  • WeakAuras Lua Script TOC
  • .h264/.h265文件 前端直接播放
  • 专访|刘伟强:在《水饺皇后》里,我放进儿时全家福照片
  • 下达专项资金、党政主官田间调研……全国多地力保夏粮稳收
  • 海港负国安主场两连败,五强争冠卫冕冠军开始掉队
  • 国际著名学者Charles M. Lieber全职受聘清华深圳国际研究生院
  • 《一鸣惊人》五一特别节目:以戏曲为桥梁,展现劳动者的坚守
  • 五一期间全国高速日均流量6200万辆,同比增长8.1%