给定一个长度为m和n的两个字符串,设有以下几种操作:替换(R),插入(I)和删除(D)且都是相同的操作。寻找到转换一个字符串插入到另一个需要修改的最小(操作)数量。这个数量就可以被视为最小编辑距离。如

给定一个长度为m和n的两个字符串,设有以下几种操作:替换(R),插入(I)和删除(D)且都是相同的操作。寻找到转换一个字符串插入到另一个需要修改的最小(操作)数量。这个数量就可以被视为最小编辑距离。如:acd与ace的EditionDistance距离为1,abc与cab的距离为1。 ***

(致 齐工大 学生哈哈哈哈哈哈)


//edit_distance
int main(){
    int len1, len2;
    string text1, text2;
    cout << "cin the length of first and second string" << endl;
    cin >> len1 >> len2;
    cout << "cin the first and second string" << endl;
    cin >> text1 >> text2;
    int distance[len1 +1][len2 + 1];
    distance[0][0] = 0;
    for(int i = 1; i < len1 +1 ; i++)
        distance[i][0] = i;
    for(int i = 1; i < len2 +1 ; i++)
        distance[0][i] = i;

    for(int i = 1; i < len1 +1 ; i++){
        for(int j = 1; j < len2 +1 ; j++){
            if(text1[i -1] == text2[j -1]){
                distance[i][j] = distance[i-1][j-1];
            } else {
                int min = max(len1, len2);

                if (distance[i-1][j]+1 < min)   // 删除
                    min = distance[i-1][j]+1;

                if (distance[i][j-1]+1 < min)   // 添加
                    min = distance[i][j-1]+1;

                if (distance[i-1][j-1]+1 < min)   // 替换
                    min = distance[i-1][j-1]+1;

                distance[i][j] = min;
            }
        }
    }


    return 0;
}

你可能感兴趣的:(给定一个长度为m和n的两个字符串,设有以下几种操作:替换(R),插入(I)和删除(D)且都是相同的操作。寻找到转换一个字符串插入到另一个需要修改的最小(操作)数量。这个数量就可以被视为最小编辑距离。如)