代码
/**
* 判断两个字符串相似度是否大于等于80%
* @param {string} str1 第一个字符串
* @param {string} str2 第二个字符串
* @returns {boolean} 相似度是否 >= 80%
*/
function isSimilar(str1, str2) {
// 如果两个字符串都为空,认为100%相似
if (!str1 && !str2) return true;
// 如果其中一个为空,直接返回false
if (!str1 || !str2) return false;
// 转换为小写进行不区分大小写比较
const s1 = str1.toLowerCase();
const s2 = str2.toLowerCase();
// 如果完全相同,直接返回true
if (s1 === s2) return true;
const len1 = s1.length;
const len2 = s2.length;
const maxLen = Math.max(len1, len2);
// 创建二维数组计算编辑距离
const matrix = [];
for (let i = 0; i <= len1; i++) {
matrix[i] = [i];
}
for (let j = 0; j <= len2; j++) {
matrix[0][j] = j;
}
// 计算Levenshtein距离
for (let i = 1; i <= len1; i++) {
for (let j = 1; j <= len2; j++) {
const cost = s1[i - 1] === s2[j - 1] ? 0 : 1;
matrix[i][j] = Math.min(
matrix[i - 1][j] + 1,
matrix[i][j - 1] + 1,