每日一题之AcWing 1222.密码脱落
题目链接:AcWing 1222. 密码脱落
¶一、题解
题目大意:
给定一个字符串,求其最长回文子序列,返回其最少脱落的字母数!
思路:
转态表示:由于是回文,因此我们使用区间来处理,使用f[i][j]
表示区间 i 到 j 的回文子序列集合。属性为:最大值!
状态计算:
- 都选:在
a[i] == a[j]
的情况下有解:f[i + 1][j - 1] + 2
- a[i]选a[j]不选:
f[i][j - 1]
,a[i]不一定可以匹配,包含第四种情况 - a[i]不选a[j]选:
f[i + 1][j]
,a[j]不一定可以匹配,包含第四种情况 - 都不选:
f[i + 1][j - 1]
最终答案: n - f[0][n - 1]
因此: 只需要计算前三种情况即可,第四种情况已经被包含!
注意: 当长度为1的时候特殊处理f[i][j] = 1
,防止越界!
¶二、AC代码
参考代码:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小牛博客!
评论