#include<iostream>
using namespace std;
int D[20][20]; // 填表矩阵设置为全局变量
int min(int a,int b,int c)
{
if(a<b && a<c) return a;
else if(b<a && b<c) return b;
else return c;
}
// 返回 P和 T的最小差别数
int ASM(char P[],int m,char T[],int n)
{
// 初始化第 0行
for(int j=1;j<=n;j++) D[0][j] = j;
// 初始化第 0列
for(int i=1;i<=m;i++) D[i][0] = i;
// 根据递推式依次计算每一列
for(int j=1;j<=n;j++){
for(int i=1;i<=m;i++){
// 注意数组下标从 0开始,即P[i-1]对应模式P的第i个元素,T[j-1]为文本T的第j个元素
if(P[i-1]==T[j-1])
D[i][j] = min(D[i-1][j-1],D[i-1][j]+1,D[i][j-1]+1);
else
D[i][j] = min(D[i-1][j-1]+1,D[i-1][j]+1,D[i][j-1]+1);
}
}
return D[m][n];
}
int main()
{
char P[5] = {'h','a','p','p','y'};
char T[6] = {'h','s','p','p','a','y'};
cout<<"最小差别数为:"<<ASM(P,5,T,6)<<endl;
return 0;
}