题解/算法 {3144. 分割字符频率相等的最少子字符串}

题解/算法 {3144. 分割字符频率相等的最少子字符串}

@LINK: https://leetcode.cn/problems/minimum-substring-partition-of-equal-character-frequency/;

很容易想到: DP[i]: 将[0...i]分割的最小个数, 然后枚举j, 如果[j+1,...i]是合法的, 那么更新DP[j]+1 -> DP[i]; (实际上 这就是答案…)

但是, 此时你可能会陷入深深的自我怀疑中, 假如DP[j]的最后一组 她可以和当前组[j+1,...i]混合到一起, 也就是应该用DP[j] + 0 -> DP[i]; (比如DP[j] = {..., ab}, 当前是{ab}, 那么显然{..., ab, ab}她不是最优的 而是{..., aabb}是最优的;
. 于是你想着, 那DP里还得记录 最后一组的方案, 这就把问题指数级复杂化了… 因为a, bb不能合并, aa, bb可以合并, 你要记录具体方案的话 太多了…
首先, 你要理解 DP的本质; 在本题中, 答案是DP[N-1] (即你DP的定义是没问题的), 然后使用前驱递推方式, 要保证DP[N-1]的正确性, 也就是 要保证 你的DP转移是没问题的;
虽然说 {...,ab} + {ab} 此时你得到{...,ab,ab} 这确实不是最优解, 但是 DP转移 就是这样定义的 (DP转移是规定死了的 他不负责最优性), 也就是虽然她不是最优解 即{...,ab,ab} 你可以认为她是错误转移, 但是 不要忘记 你的目的只有1个 就是保证DP[N-1]的正确性 只要他正确了就可以, 存在错误的DP转移没问题, 因为当{...,ab,ab}时, 你一定会找到一个jjjj = {...} 此时{...} + {abab} 他是正确的; 也就是 存在错误的DP转移没问题, 只要有1个正确的 换句话说 你只要保证DP[i]最终的正确性 即可;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值