繁体   English   中英

如何获得两个字符串中相同字符的数量?

[英]How do I get the amount of identical characters in two strings?

我正在尝试创建一个 function 以返回您提供的 2 个字符串中相同字符的数量。

  let [string1, string2] = target.split(",").map(p => p.trim());
  let [length, char1, char2] = "";
  let total = "0";
  if (!string1 || !string2) return this.errorReply(`Please provide two words or sentences separated by a comma.`);
  if (string1.length > string2.length) {
    length = string1.length;
  } else {
    length = string2.length;
  }
  let i;
  for (i = 0; i < length; i++) {
    char1 = string1.charAt(i);
    char2 = string2.charAt(i);
    if (char1 === char2) total++;
  }
  return this.sendReply(`|html|These two strings have <b>${total}</b> characters in common.`);

这是我到目前为止所拥有的,但这会检查第一个字符是否等于第一个,第二个字符是否等于第二个,等等。我需要它基本上取第一个字符串的第一个字符,并检查它是否是与第二个字符串中的任何字符相同,并且一旦检查了所有字符,它就会移动到第一个字符串的第二个字符并重复。 关于我将如何做到这一点的任何帮助?

 const getStringMap = str => { const map = new Map(); for(let char of str) { if(map.has(char)) { map.set(char, map.get(char) + 1); } else { map.set(char, 1); } } return map; }; const getCommonCount = (str1, str2) => { const map1 = getStringMap(str1); const map2 = getStringMap(str2); let commonCount = 0; for(let k of map1.keys()) { if(map2.has(k)) { commonCount += Math.min(map1.get(k), map2.get(k)); } } return commonCount; }; console.log(getCommonCount('aabcc','aabc'));

这将根据以下要求处理两个字符串中的多个字母,即如果两个字符串都有x个字母,即x个字母共有,但如果一个字符串有 1 个字母而另一个字符串 > 1,则只有 1 个共有。

见安东尼的回答

以下答案没有考虑重复字符,因此如果有任何重复字符,则会给出错误的 output 。


使用for...of迭代第一个字符串并使用include()方法检查当前字符是否存在于第二个字符串中。

 function getIdenticalCount(str1, str2) { let count = 0; for (let ch of str1) { if (str2.includes(ch)) { count++; } } return count; } console.log(getIdenticalCount("apple", "bat")); console.log(getIdenticalCount("cat", "dog")); console.log(getIdenticalCount("apple", "pineapple"));

你可以很容易地做到这一点。 首先将其中一个字符串转换为数组,然后使用Array.filterArray.includes来确定是否存在公共字符。

然后,您可以根据需要返回它。 下面的示例将返回一个唯一匹配的数组。

获取独特的字符

 const getCommonChars = (str1, str2) => { const letters = str1.split(''); return [...new Set(letters.filter(s => str2.includes(s)))]; }; const result1 = getCommonChars('abcdefg', 'this is a sentence'); console.log('result1', result1) const result2 = getCommonChars('aaaaaabbbbbbxxxxx', 'a blue bird can be exxxxxtra small'); console.log('result2', result2)

获取计数

 const getCommonCharsWithCounts = (str1, str2) => { const letters = str1.split(''); const lettersToSearch = str2.split(''); return letters.reduce( (acc, curr) => { acc[curr] = lettersToSearch.filter(l => l === curr).length; return acc; }, {}); }; const result3 = getCommonCharsWithCounts('abcdefg', 'this is a sentence'); console.log('result3', result3) const result4 = getCommonCharsWithCounts('aaaaaabbbbbbxxxxx', 'a blue bird can be exxxxxtra small'); console.log('result4', result4)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM