$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)