链接
题意
给定一个字符串\(\text S\) ,最少需要几次增删改操作可以把\(\text S\)变成一个回文字符串?一次操作可以在任意位置插入一个字符,或者删除任意一个字符,或者把任意一个字符修改成任意其他字符。输出最少的操作次数。
数据范围:字符串\(\text S\)。\(\text S\)的长度不超过\(100\), 只包含\(\text{A-Z}\)。
分析
这是一道区间\(dp\)的题目;也是经典的最少操作次数变成回文串的问题;对于
\(dp[i][j]\)表示\([i,j]\)区间的子串变成回文串最少操作次数,对于一个串\(bab\),我们已经知道区间长度为\(2\)的所有状态,对于区间长度为\(3\)的阶段,此时\(s[i]==s[j]\),那么显然有\(dp[i][j]=dp[i+1][j-1]\),对于一个串\(bba\),此时\(s[i]!=s[j]\),此时来说,我们只需要修改\(s[i]\)为\(s[j]\)或者修改\(s[j]\)为\(s[i]\)即可,所以我们有\(dp[i][j]=\min\{dp[i+1][j]+1,dp[i][j-1]+1\}\)。
初始状态\(dp[i][i]=0\)。
代码
1 |
|