1. 程式人生 > >編輯距離問題(動態規劃)

編輯距離問題(動態規劃)

一、問題描述

                設A和B是兩個字串,長度分別為n,m要用最少的字元操作(包括字元的插入、刪除、修改),這樣的操作稱為字串A到B的操作距離,記為d(A,B)。

#include <iostream>
#include <cstring>
#include <algorithm>
#define MAXN 1000
using namespace std;
int min_three(int a, int b, int c) {
	int temp = min(a, b);
	return min(temp, c);
}
int main() {
	char str1[MAXN], str2[MAXN];
	int num[MAXN][MAXN], i, j, len1, len2;
	while(cin>>str1>>str2) {
		len1 = strlen(str1);
		len2 = strlen(str2);
		for(i = 0; i < len1; i++) {
			num[i][0] = i;
		}
		for(j = 0; j < len2; j++) {
			num[0][j] = j;
		}		
		for(i = 1; i < len1; i++) {
			for(j = 1; j < len2; j++) {
				if(str1[i]==str2[j]) {
					num[i][j] = num[i-1][j-1] + 1;
				} else {
					num[i][j] = min_three(num[i][j-1], num[i-1][j-1], num[i][j-1]) + 1; 
				}
			}
		}
		cout<<num[len1-1][len2-1]<<endl;
	}
	return 0;
}