在JS中如何检查两个字符串并确定每个字符串中的字母是否位于同一字母行?

问题描述 投票:0回答:3

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

“无菌” 「见面」

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

那么,我该如何让它发挥作用呢?下面的代码是不起作用的代码,它检查两者中是否存在字母,而不检查它们是否在单词中完全匹配。也许我发现了什么问题?

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);
```
javascript string compare
3个回答
1
投票

可以进行优化,并且可以考虑一些边缘情况,但这可能会。

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));


0
投票

这应该可以完成工作

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
    。在每个循环周期中,我们比较
    a
    b
    字符串中同一索引上的字母。如果字母匹配,则我们将
    sameLetters
    加一,然后继续循环。
  3. 返回
    sameLetters
    - 这就是我们要找的数字,同一个索引下相同字母的数字

0
投票

实现此目的的一种简短方法是使用

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));

© www.soinside.com 2019 - 2024. All rights reserved.