You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何计算两组字符串的相似度百分比?基于索引位置匹配的JavaScript实现问询

字符串位置匹配相似度计算(JavaScript实现)

问题1:怎么计算两组字符串的相同位置匹配占比?

其实核心逻辑很简单,分三步就行:

  • 先确定有效比较长度:通常取两个字符串的最小长度——毕竟短字符串之外的位置,长字符串的字符没地方对应匹配
  • 逐个遍历索引位置,统计两个字符串在同一位置字符完全相同的次数
  • 最后用「匹配次数 ÷ 有效比较长度」算出占比,转成百分比格式就搞定了

如果你的需求是把长字符串超出的部分都算成不匹配,那把分母换成两个字符串的最大长度就行,根据实际场景调整~


问题2:针对你的字符串集合的具体实现

针对你给出的这个键值对集合,我写了个简洁的实现,直接就能用:

首先封装一个通用的相似度计算函数,复用性拉满:

function calculatePositionSimilarity(str1, str2) {
  // 处理空字符串的边界情况,避免报错
  if (!str1 || !str2) return '0.00%';
  
  const minLength = Math.min(str1.length, str2.length);
  let matchCount = 0;
  
  // 遍历每个位置,统计匹配的字符数
  for (let i = 0; i < minLength; i++) {
    if (str1[i] === str2[i]) {
      matchCount++;
    }
  }
  
  // 计算百分比并保留两位小数,格式更友好
  return ((matchCount / minLength) * 100).toFixed(2) + '%';
}

然后遍历你的集合,批量计算每组的相似度:

// 你的字符串集合
const stringCollection = {
  0: { question: "1f31f", answer: "1f31a" },
  1: { question: "1f32f", answer: "1fada" }
};

// 遍历处理每一组
Object.entries(stringCollection).forEach(([key, item]) => {
  const similarity = calculatePositionSimilarity(item.question, item.answer);
  console.log(`第${parseInt(key)+1}组(question vs answer)的位置匹配相似度:${similarity}`);
});

运行结果:

第1组(question vs answer)的位置匹配相似度:80.00%
第2组(question vs answer)的位置匹配相似度:40.00%

简单解释下结果:

  • 第一组的"1f31f""1f31a",前4个字符完全匹配,第5个不同,5个位置里中4个,所以是80%
  • 第二组的"1f32f""1fada",只有前2个字符匹配,5个位置里中2个,所以是40%

要是你需要基于较长字符串的长度计算(比如其中一个字符串更长,超出部分算不匹配),只需要把函数里的minLength换成Math.max(str1.length, str2.length)就可以了~


内容的提问来源于stack exchange,提问作者LeCoda

火山引擎 最新活动