edit distance
1000(ms)
65535(kb)
568 / 2526
設a 和b 是2 個字串。要用最少的字元操作將字串a 轉換為字串b。這裡所說的字元操作包括 (1)刪除乙個字元; (2)插入乙個字元; (3)將乙個字元改為另乙個字元。 將字串a變換為字串b 所用的最少字元運算元稱為字串a到b 的編輯距離,記為d(a,b)。試設計乙個有效演算法,對任給的2 個字串a和b,計算出它們的編輯距離d(a,b)。
輸入
第一行是字串a,檔案的第二行是字串b。字串長度不大於2000。輸出
輸出距離d(a,b)樣例輸入
fxpimu樣例輸出xwr
5
dp[0][j]:當i=0時相當於,第乙個字串為空,第二個字串長度為j,此時相當於給第乙個字串加字元。
dp[i][0]:當j=0時相當於,第乙個字串長度為i,第二個字串長度為0,此時相當於給第乙個字串刪字元。
dp[i][j]:i>0,j>0時,有dp[i][j] = min(dp[i - 1][j]+1, min(dp[i][j - 1]+1, dp[i - 1][j - 1] + (!(str1[i-1] == str2[j-1]))));
此時對於dp[i][j]可以由dp[i - 1][j]+1(第乙個字串加乙個字元),dp[i][j - 1]+1(第乙個字串刪除乙個字元),dp[i - 1][j - 1] +flag(第乙個字串修改乙個字元)取最小得到。
#include#include#include#include#include#include#includeusing namespace std;
#define inf 0x3f3f3f3f
#define ll long long int
#define getl(str) strlen(str)
#define m(dp,a) memset(dp,sizeof(dp),a)
int dp[2005][2005];
int main()
} cout << dp[len1][len2] << endl;
} return 0;
}
編輯距離及編輯距離演算法
編輯距離概念描述 編輯距離,又稱levenshtein距離,是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將kitten一字轉成sitting sitten k s sittin e i sitting g 俄...
編輯距離及編輯距離演算法
include include include using namespace std const int max 1001 int maxlen max max int maxlen string str1,string str2 return maxlen len1 len2 int main ...
編輯距離及編輯距離演算法
include include include using namespace std const int max 1001 int maxlen max max int maxlen string str1,string str2 return maxlen len1 len2 int main ...