JS中如何检查两个字符串,并判断每个字符串中的字母是否在同一字母行中?

How do you check two strings in JS and determine if any letters in each is placed in the same letter row?

我一直在四处寻找解决方案,但似乎找不到。我正在尝试制作一个函数来检查两个不同的字符串以识别每个单词相同位置的任何单词,并将其输出为数字。一个例子:

“无菌” “会议”

这两个词在同一个地方有一个E和一个I。别介意两者都存在的字母,但是被打乱了(我有一个解决方案,但恐怕它对我没有帮助)。我正在尝试为匹配的两个字母构建输出 2 的东西。

所以,是的,我该如何让它发挥作用?下面的代码是 non-working 代码,它检查两个字母中的现有字母,而不是它们是否在单词中完全匹配。也许我发现它有问题?

var str1 = "sterile";
var str2 = "meeting";


function second() {
    return Array.prototype.filter.call(str1, function(c) {
        return str2.indexOf(c) === -1;
    }, this).join('');
}

function second() {
    return Array.prototype.filter.call(str1, function(c) {
        return str2.indexOf(c) === -1;
    }, this).join('');
}

console.log(second(str1, str2));
console.log(str1.length - second(str1, str2).length);
```

这应该可以完成工作:)

const str1 = "sterile";
const str2 = "meetinghey";


const getSameLetters = (a, b) => {
  const minLength = Math.min(a.length, b.length);
  const sameLetters = []
  for (let i = 0; i < minLength; i++) {
    if (a[i] === b[i]) {
      sameLetters.push({ i, letter: a[i] })
    }
  }
  return sameLetters
}

console.log(getSameLetters(str1, str2))

或者下面的,如果你只关心相同字母的个数:

const str1 = "sterile";
const str2 = "meetinghey";


const getSameLetters = (a, b) => {
  const minLength = Math.min(a.length, b.length);
  let sameLetters = 0
  for (let i = 0; i < minLength; i++) {
    if (a[i] === b[i]) {
      sameLetters++
    }
  }
  return sameLetters
}

console.log(getSameLetters(str1, str2))

这些算法背后的想法是:

  1. 因为我们只想在两个单词中找到与相同索引匹配的字母,所以我们应该只迭代到最小单词的末尾。因为您不想将未定义的“char”与来自另一个字符串的“char”进行比较 - 它们永远不会匹配。这就是 Math.min(a.length, b.length) 的发现。
  2. 然后我们从零迭代到minLength。在每个循环周期中,我们比较 ab 字符串中同一索引上的字母。如果字母匹配,则我们将 sameLetters 递增 1,然后继续循环。
  3. Return sameLetters - 这就是我们要查找的数字,相同索引下相同字母的数字:)

实现此目的的一种简短方法是使用 split 将其中一个单词拆分为一个数组,然后使用 forEach 遍历该数组以查看每个位置的字符是否是等于另一个单词中相同位置的字符,如果它们相同则增加计数器。

const str1 = "sterile";
const str2 = "meeting";

checkWords = (a, b) => {
  let count = 0;
  a.split('').forEach((letter, index) => letter === b[index] ? count++ : '');
  return count;
}
console.log(checkWords(str1,str2));

可以优化并且可以计算一些边缘情况,但这可能会。

const str1 = 'sterile';
const str2 = 'meetinghey';

function stringEqualityCheck(str1, str2) {
  const longestString = str1.length > str2.length ? str1 : str2;
  const longestStringArray = longestString.split('');

  const shortestString = str1.length > str2.length ? str2 : str1;

  let equalityCounter = 0;

  shortestString.split('').forEach((letter, index) => {
    if (letter === longestStringArray[index]) {
      equalityCounter++;
    }
  });

  return equalityCounter;
}

console.log(stringEqualityCheck(str1, str2));