給定兩個字符串S和T,對於T咱們容許三種操做:ios
for j = 0 to n do f[j] = j endfor for i = 1 to m do last = f[0] f[0] = i for j = 1 to n do temp = f[i,j] f[i,j] = min(last + same(i,j), temp + 1, f[j – 1] + 1) last = temp endfor endfor
注意: 咱們對於i實際上更新j的順序是由小到達的,因此咱們須要保存「舊的」f[i-1,j – 1]。函數
題解:優化
#include<iostream> #include<cstdio> #include<cstring> using namespace std; char a[1010],b[1010]; int f[1010][1010]; int main() { cin>>a; cin>>b; int m=strlen(a); int n=strlen(b); for(int i=1;i<=m;i++) f[i][0]=i; for(int j=1;j<=n;j++) f[0][j]=j; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) if(a[i-1]==b[j-1]) f[i][j]=f[i-1][j-1]; else f[i][j]=min(min(f[i-1][j-1],f[i-1][j]),f[i][j-1])+1; cout<<f[m][n]; }
若是對你有所幫助,別忘了加好評哦;麼麼噠!!下次見!88spa