1. 程式人生 > 實用技巧 >計算字串的相似度 (HJ79)

計算字串的相似度 (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; }