首页 > 解决方案 > 在字符数组中查找缺失的字符 (javascript)

问题描述

我正在尝试编写一个函数,该函数接受单个字符数组(例如['a','b','d'])并返回丢失的第一个字符(例如'c')。我不确定为什么我当前的功能不像描述的那样工作。

const alph = "abcdefghijklmnopqrstuvwxyz";
const findMissingLetter = (arr) => {
  arr.forEach((l, i, a) => {
    const ltrIdx = alph.indexOf(l); //a's index in the alph is 0
    const arrNxtLtr = a[i+1]; //the next ltr after a is c
    if(arrNxtLtr !== alph[ltrIdx + 1]) return alph[ltrIdx + 1] //return the letter that is missing from the arr
  })
  return -1 //return -1 if there is no missing char
}

console.log(findMissingLetter(['a','c']))

附言。我见过类似的方法来解决这个一般问题,我只是想知道我的功能做错了什么,所以我可以学习。

谢谢!

标签: javascript

解决方案


如果您只是想找到两个字符串之间的第一个不匹配项,那么只需逐个字符地比较它们,直到找到不匹配项或到达输入字符串的末尾:

const alph = "abcdefghijklmnopqrstuvwxyz";
const findMissingLetter = (arr) => {
  for(let i=0; i<arr.length; i++) {
    if(arr[i] !== alph[i]) {
      return alph[i]; // found the first mismatch
    }
  }
  return -1 // return -1 if there is no missing char
}

console.log(findMissingLetter([]),"-1?");
console.log(findMissingLetter(['a']),"-1?");
console.log(findMissingLetter(['b']),"a?");
console.log(findMissingLetter(['a','b']),"-1?");
console.log(findMissingLetter(['a','c']),"b?");

并且避免forEach()如果你想从循环内部返回,因为它已经被评论了。


如果输入字符串不必从“大”字符串的开头开始,找到它的第一个字符并从那里进行比较:

const alph = "abcdefghijklmnopqrstuvwxyz";
const findMissingLetter = (arr) => {
  if(arr.length===0)
    return -1;
  let start = alph.indexOf(arr[0]);
  for(let i=0; i<arr.length; i++) {
    if(arr[i] !== alph[start+i]) {
      return alph[start+i]; // found the first mismatch
    }
  }
  return -1 // return -1 if there is no missing char
}

console.log(findMissingLetter([]),"-1?");
console.log(findMissingLetter(['a']),"-1?");
console.log(findMissingLetter(['b']),"-1?");
console.log(findMissingLetter(['a','b']),"-1?");
console.log(findMissingLetter(['a','c']),"b?");
console.log(findMissingLetter(['b','c','e','f']),"d?");


推荐阅读