我们称一个字符串 S 包含字符串 T 是指 T 是 S 的一个子序列,即可以从字符串 S 中抽出若干个字符,它们按原来的顺序组合成一个新的字符串与 T 完全一样。
给定两个字符串 S和 T,请问最少修改 S 中的多少个字符,能使 S 包含 T?
思路同编辑距离:
dp[ i ][ j ]: S通过删除和修改操作得到T的最少操作个数(删除不算操作个数)
考虑S[i]进行的操作:
(1)s[i]删除:如果删除s[i]ST匹配,那么必须保证s[1~i-1]和T[1~j]匹配
dp[i][j]=dp[i-1][j]
(2)s[i]修改:如果修改s[i]ST匹配,那么必须保证S[1~i-1]和T[1~j-1]匹配,但是如果s[i]==t[j],那么操作个数不需要加1
dp[i][j]=dp[i-1][j-1]+1或者0
初始化:
因为(i,j)只能由前一个退出,所以只需要初始dp[0][i]和dp[0][j]即可
dp[i][0]=0:无需修改
dp[0][i]=INF:不可能修改
注意:
(1)删除操作不算操作个数
(2)初始化问题