[英]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.filter
和Array.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.