标签:距离 顺序 ace class 空间复杂度 对比 style 伪代码 content
给定两个字符串S和T,对于T我们允许三种操作:
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]; }
如果对你有所帮助,别忘了加好评哦;么么哒!!下次见!88
标签:距离 顺序 ace class 空间复杂度 对比 style 伪代码 content
原文地址:http://www.cnblogs.com/cangT-Tlan/p/6219005.html