字符串a到b的编辑距离: 将字符串a变换为字符串b所用的最少字符操作数
d[i][j]: 表示a中i个字符 b中j个字符时 将字符串a变换为字符串b所用的最少字符操作数
即最后求d[m][n]
#include <iostream>
using namespace std;
int min(int a,int b,int c)
{
int temp=(a<b?a:b);
if(temp<c) return temp;
else return c;
}
int main()
{
int d[100][100]={0}; //d[i][j] i个字符和j个字符的编辑距离 其中i对应样本a j对应文本b
string a,b;
cin>>a>>b;
int m=a.length();
int n=b.length();
for(int j=0;j<=n;j++) d[0][j]=j;
for(int i=0;i<=m;i++) d[i][0]=i;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
int del=d[i-1][j]+1;
int add=d[i][j-1]+1;
int alter=d[i-1][j-1]+((a[i-1]==b[j-1])?0:1);
//for循环i和j从第一个数开始 那其实从比较a[i-1]==b[j-1]开始 索引比物理位置小1!!
d[i][j]=min(del,add,alter); // 内置方法只支持两个数比较 所以要自己写
}
}
cout<<d[m][n];
return 0;
}
为什么有一个测试点段错误
破案了,pta编译器的问题,将二维数组定义为d[a.length()+1][b.length()+1]后就全部通过了