$f[i][j]$表示A中前i个字母转化为B中前j个字母所需最少操作次数。

讨论对A中第i个字符操作后,A中前i个字符串与B中前j个字符串相同。

1.在$a[i]$后增加一个字母,增加后两字符串相同,则增加的字母必然为$b[j]$。则增加前A的前i个字母与B的前j-1个字母相同。此时$f[i][j]=f[i][j-1]+1$

2.把$a[i]$删除。删除后两字符串相同,则删除前A的前i-1个字母与B的前j个字母相同。此时$f[i][j]=f[i-1][j]+1$

3.把$a[i]$修改为$b[j]$。修改后两字符串相同。则修改前A的前i-1个字母与B的j-1个字母相同。若$a[i]==b[j]$则不需要操作次数。若$a[i]!=b[j]$则需要修改,操作次数加一。

最后把三种情况取个min即可。

考虑边界情况。$i==0$时则j是多少就要在A中增加多少个字符。$j==0$时,则i是多少就要在A中删除多少个字符。

A的长度为n,B的长度为m

状态数为n*m,转移为O(1)