【題目描述】
設A和B是兩個字符串。我們要用最少的字符操作次數,將字符串A轉換爲字符串B。這裏所說的字符操作共有三種:
1、刪除一個字符;
2、插入一個字符;
3、將一個字符改爲另一個字符。
對任意的兩個字符串A和B,計算出將字符串A變換爲字符串B所用的最少字符操作次數。
【輸入】
第一行爲字符串A;第二行爲字符串B;字符串A和B的長度均小於2000。
【輸出】
只有一個正整數,爲最少字符操作次數。
【輸入樣例】
sfdqxbw gfdgw
【輸出樣例】
4
// Created on 2020/2/22
/*#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <climits>*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int idata=2000+5;
const int inf=0x3f3f3f3f;
int n,m,t;
int minn=INT_MAX,maxx=INT_MIN;
int sumfee[idata][idata];
//兩字符串長度爲i,j:sumfee[i][j]爲最少操作數
char ch1[idata],ch2[idata];
string str1,str2;
int len1,len2;
int i,v,j,k;
inline void initial()
{
len1=str1.length();
len2=str2.length();
for(i=0;i<len1;i++)
ch1[i+1]=str1[i];
for(i=0;i<len2;i++)
ch2[i+1]=str2[i];
for(i=1;i<=len1;i++)
sumfee[i][0]=i;
for(i=1;i<=len2;i++)
sumfee[0][i]=i;
return ;
}
int main()
{
cin>>str1>>str2;
initial();
for(i=1;i<=len1;i++)
{
for(j=1;j<=len2;j++)
{
if(ch1[i]==ch2[j])
sumfee[i][j]=sumfee[i-1][j-1];
else
sumfee[i][j]=min(min(sumfee[i-1][j],sumfee[i][j-1]),sumfee[i-1][j-1])+1;
}
}
cout<<sumfee[len1][len2]<<endl;
return 0;
}