缺少字母 freecodecamp

Missing letters freecodecamp

其实我几分钟前就找到了答案。 但是我发现了一些奇怪的事情。

这是我在 freeCodeCamp 挑战中 'Missing letters' 的回答。

function fearNotLetter(str) {

var string; 

for (i=0;i<str.length;i++) {
  if(str.charCodeAt(i)+1 < str.charCodeAt(i+1)){
    string = String.fromCharCode(str.charCodeAt(i)+1);
 }
}

return string;

}  

当我将 if 语句中的 < 运算符更改为 !=(不相同)时,它不起作用! 对我来说,似乎 != 的工作原理与 < 运算符完全相同。 (因为 'not same' 可能意味着某物比另一个大。)

上面代码中的 < 和 != 有什么区别?

您的代码有一个小缺陷,当您使用 < 但不使用 != 时会起作用。

如果你看到 str.charCodeAt(i+1);此代码在最后一次迭代中检查字符串末尾之后的一个点,并将 return 一个 NaN 结果。

如果我提供字符串 "abce",它将检查 f 是否 < NaN。我相信 NaN 不能与 f 的值进行比较,因此它不会进入 if 语句。因此它将保留在先前迭代中找到的缺失字母 d,该字母存储在您的字符串变量中。

但是,如果您提供 !=,那么在相同的情况下它会知道 f != NaN 并进入 if 语句。然后这将覆盖实际丢失的字母并使您的 FCC 测试用例失败,因为它正在用字符串变量中的 f 替换丢失的 d。

要修复您的代码,只需将 for 循环更改为在字符串长度之前结束一次迭代即可。

for (i = 0; i != str.length-1; i++) {
}

这是我没有使用 .charCodeAt() 函数的方法:)

function fearNotLetter(str) {
  var ind;
  var final = [];
  var alf =['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
  str = str.split('');
  ind = alf.splice(alf.indexOf(str[0]),alf.indexOf(str[str.length-1]));
  for(var i=0;i<ind.length;i++){
    if(str.indexOf(ind[i]) == -1){
      final.push(ind[i]);
    }
  }
  if(final.length != 0){
    return final.join('');
  }
  return;
}

fearNotLetter("bcef");

我的解决方案:

function fearNoLetter(str){
    var j= str.charCodeAt(0);
    for(var i=str.charCodeAt(0); i<str.charCodeAt(str.length-1); i++){
        j = str.charCodeAt(i - str.charCodeAt(0));
        if (i != j){
            return String.fromCharCode(i);
        }
    }
}

我的解决方案:

function fearNotLetter(str) {
  let y = 0;
  for (let i = str.charCodeAt(0); i < str.charCodeAt(str.length - 1); i++) {
    if (str.charCodeAt(y) != i) {
      return String.fromCharCode(i);
    }
    y++;
  }
  return;
}
console.log(fearNotLetter("ace"));

function fearNotLetter(str) {
  let alpha = "abcdefghijklmnopqrstuvwxyz";
  let alphabet = []
  for(let j = 0; j< alpha.length; j++){
    alphabet.push(alpha[j])
  }
  if (alphabet.length == str.length){
    let result = undefined;
    return result
  }else{
      const start  =alphabet.indexOf(str[0])
      let end = (str.length)-1
      const stop  = alphabet.indexOf(str[end])
      const finish = alphabet.slice(start,stop)


      let result = finish.filter(item => !finish.includes(item) || !str.includes(item))
      result = String(result)
      return  result
  }
  return result
}


console.log(fearNotLetter("abcdefghijklmnopqrstuvwxyz"));