当前位置: 首页 > 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文件 前端直接播放
  • 美国“杜鲁门”号航母一战机坠海
  • 【社论】优化限购限行,激发汽车消费潜能
  • 上海出台灵活就业人员公积金新政:不限户籍、提取自由,6月起施行
  • 国家税务总局:“二套转首套”可以享受贷款利息个税专项扣除
  • 在差异中建共鸣,《20世纪美国文学思想研究》丛书出版
  • 首映|《人生开门红》:段子背后都是案子