计算字符串的相似度 (HJ79)

一:解题思路

这道题目和leetcode72题,编辑距离差不多,只是定义2个字符串距离不一样而已。可以放在一起进行学习。Time:O(m*n),Space:O(m*n)

二:完整代码示例 (C++版和Java版)

C++代码:

#include<iostream>
#include<vector>
#include <string>
#include <algorithm>

using namespace std;

int min3(int a, int b, int c)
{
    return min(a,min(b,c));
}

int minDistance(string word1, string word2) 
{
    if (word1.size() == 0 || word2.size() == 0) return 0;
    int m = word1.size() + 1;
    int n = word2.size() + 1;
    vector<vector<int>> d(m,vector<int>(n,0));

    for (int j = 0; j < n; j++)
        d[0][j] = j;
    for (int i = 0; i < m; i++)
        d[i][0] = i;

    for (int i = 1; i < m; i++)
    {
        for (int j = 1; j < n; j++)
        {
            if (word1[i - 1] == word2[j - 1]) d[i][j] = d[i-1][j-1];
            else d[i][j] = min3(d[i-1][j-1],d[i-1][j],d[i][j-1]) + 1;
        }
    }

    return d[m-1][n-1];
}

int main()
{
    string str1 = "";
    string str2 = "";

    while (cin >> str1 >> str2)
    {
        int distance = minDistance(str1,str2);

        cout << "1/" << to_string(distance + 1) << endl;
    }

    return 0;
}
posted @ 2020-07-31 12:20  repinkply  阅读(488)  评论(0)    收藏  举报