1298:计算字符串距离
考虑一种特殊情况“sad adf”
最初我仅将f[0][0]初始化为0,程序得到的答案一直是3,但可以看出正确的答案应当是2。
后面发现应当将数组边缘进行正确的初始化。
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int N=1005; 6 int f[N][N]; 7 8 int main(){ 9 int n; 10 cin>>n; 11 while(n--){ 12 string s1,s2; 13 cin>>s1>>s2; 14 int l1=s1.length(),l2=s2.length(); 15 memset(f,127,sizeof(f)); 16 //初始化 17 for(int i=0;i<=l1;i++)f[0][i]=i; 18 for(int i=1;i<=l2;i++)f[i][0]=i; 19 f[0][0]=0; 20 for(int i=1;i<=l2;i++) 21 for(int j=1;j<=l1;j++){ 22 f[i][j]=f[i-1][j-1]+(s2[i-1]==s1[j-1]?0:1); 23 f[i][j]=min(f[i][j],min(f[i-1][j],f[i][j-1])+1); 24 } 25 cout<<f[l2][l1]<<endl; 26 } 27 return 0; 28 }