困难
给你一个字符串 s 和一个整数 k,请将 s 划分为 k 个 ,使得将每个子串变为 半回文串 所需的字符修改次数之和最小。
返回所需的 最少 字符修改次数。
半回文串 是一类特殊的字符串:它可以按照某种重复模式拆分后,使每一组都成为 。判断一个字符串是否为半回文串的方法如下:
- 选择该字符串长度的一个正因数
d。其中,d的取值范围是从1到严格小于字符串长度的所有正因数。对于长度为1的字符串,根据这一定义,它不存在合法的因数,因为唯一的因数就是其长度本身,而这是不允许的。 - 对于给定的因数
d,将字符串按长度为d的重复模式分组。具体来说,第 1 组由位置1、1 + d、1 + 2d、…… 上的字符组成;第 2 组由位置2、2 + d、2 + 2d、…… 上的字符组成;以此类推。 - 如果这些分组中的每一组都是回文串,则该字符串被视为半回文串。
以字符串 "abcabc" 为例:
"abcabc"的长度为6。合法的因数有1、2和3。- 当
d = 1时:整个字符串"abcabc"构成一组。它不是回文串。 - 当
d = 2时:- 第 1 组(位置
1, 3, 5):"acb" - 第 2 组(位置
2, 4, 6):"bac" - 这两组都不是回文串。
- 第 1 组(位置
- 当
d = 3时:- 第 1 组(位置
1, 4):"aa" - 第 2 组(位置
2, 5):"bb" - 第 3 组(位置
3, 6):"cc" - 所有分组都是回文串。因此,
"abcabc"是一个半回文串。
- 第 1 组(位置
示例 1:
输入: s = "abcac", k = 2
输出: 1
解释: 将 s 划分为 "ab" 和 "cac"。"cac" 本身已经是半回文串。将 "ab" 改为 "aa" 后,它在 d = 1 时成为半回文串。
示例 2:
输入: s = "abcdef", k = 2
输出: 2
解释: 将其划分为子串 "abc" 和 "def"。这两个子串各自都需要修改 1 个字符才能变成半回文串。
示例 3:
输入: s = "aabbaa", k = 3
输出: 0
解释: 将其划分为子串 "aa"、"bb" 和 "aa"。它们都已经是半回文串。
提示:
2 <= s.length <= 2001 <= k <= s.length / 2s仅由小写英文字母组成。