Find missing letter in list of alphabets

前端 未结 16 1532
逝去的感伤
逝去的感伤 2021-01-01 05:15

I am trying to solve the following issue:

Find the missing letter in the passed letter range and return it. If all letters are present in the range, return undefine

相关标签:
16条回答
  • 2021-01-01 05:20

    I think this is the simplest code to do this:

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

    This version will reject illegal input, accept both upper and lower case, check that there is only 1 hole in the range, and that there is exactly 1 character missing.

    function skippedLetter(str) {
        if (!str.match(/^[a-zA-Z]+$/)) return;
        var letter = "", offset = str.charCodeAt(0);
        for (var i = 1; i < str.length; i++) {
            var diff = str.charCodeAt(i) - i - offset;
            if (diff == 1) letter += String.fromCharCode(i + offset++)
            else if (diff) return;
        }
        if (letter.length == 1) return letter;
    }
    
    alert(skippedLetter('123567'));		// illegal characters
    alert(skippedLetter(''));		// empty string
    alert(skippedLetter('a'));		// too short
    alert(skippedLetter('bc'));		// nothing missing
    alert(skippedLetter('df'));		// skipped letter = e
    alert(skippedLetter('GHIKLM'));		// skipped letter = J
    alert(skippedLetter('nOpRsT'));		// cases mixed
    alert(skippedLetter('nopxyz'));		// too many characters missing
    alert(skippedLetter('abcefgijk'));	// character missing more than once
    alert(skippedLetter('abcefgfe'));	// out of order

    0 讨论(0)
  • 2021-01-01 05:20

    function fearNotLetter(str) {
    
      var a = str.split('');
      var array = [];
      var j = 0;
    
      for (var i = 1; i < a.length; i++) {
        var d = a[i].charCodeAt(0);
        var c = a[i - 1].charCodeAt(0);
    
        var delta = d - c;
    
        if (delta != 1) {
          array[i] = String.fromCharCode(a[i - 1].charCodeAt(0) + 1);
        }
      }
    
      str = array.join('');
    
      if (str.length === 0) {
        return undefined;
      } else {
        return str;
      }
    }
    
    fearNotLetter('abcefr');

    0 讨论(0)
  • 2021-01-01 05:21

    Here is what I use:

    function fearNotLetter(str) {
            var firstLtrUnicode = str.charCodeAt(0),
                lastLtrUnicode = str.charCodeAt(str.length - 1);
            var holder = [];
            for (var i=firstLtrUnicode; i<=lastLtrUnicode; i++) {
                holder.push(String.fromCharCode(i));
            }
            var finalStr = holder.join('');
            if ( finalStr === str ) { return undefined; }
            else { return holder.filter( function(letter) {
                return str.split('').indexOf(letter) === -1;
            }).join(''); } }
    
    0 讨论(0)
  • 2021-01-01 05:22
    function fearNotLetter(str) {  
      var string = array. join("");
      for (var i = 0; i < string. length; i++) {                    
        if (string. charCodeAt(i + 1) - string. charCodeAt(i) != 1) {
          return String. fromCharCode(string. charCodeAt(i) + 1);
        } 
      }
      return undefined 
    }
    
    0 讨论(0)
  • 2021-01-01 05:25

    How about this one? it finds all missing letters anywhere between the first and the last given letters:

    function fearNotLetter(str) {
      var strArr = str.split('');
      var missingChars = [], i = 0;
      var nextChar = String.fromCharCode(strArr[i].charCodeAt(0)+1);
      while (i<strArr.length - 1) {
        if (nextChar !== strArr[i+1]){
          missingChars.push(nextChar);
          nextChar = String.fromCharCode(nextChar.charCodeAt(0)+1);
        } else {
          i++;
          nextChar = String.fromCharCode(strArr[i].charCodeAt(0)+1);
        }
      }
    
      return missingChars.join('') === '' ? undefined : missingChars.join('') ;
    }
    
    console.log(fearNotLetter("ab"));
    
    0 讨论(0)
  • 2021-01-01 05:26

    I would do it like this:

    function fearNotLetter(str) {
        var i, j = 0, m = 122;
        if (str) {
            i = str.charCodeAt(0);
            while (i <= m && j < str.length) {
                if (String.fromCharCode(i) !== str.charAt(j)) {
                    return String.fromCharCode(i);
                }
                i++; j++;
            }
        }
        return undefined;
    }
    
    console.log(fearNotLetter('abce'));        // "d"
    console.log(fearNotLetter('bcd'));         // undefined
    console.log(fearNotLetter('bcdefh'));      // "g"
    console.log(fearNotLetter(''));            // undefined
    console.log(fearNotLetter('abcde'));       // undefined
    console.log(fearNotLetter('abcdefghjkl')); // "i"

    i can go from 97 to 122, this interval corresponds to the ASCII codes of the lower case alphabet.

    If you want it not to be case sensitive, just do str = str.toLowerCase() at the beginning of the function.

    0 讨论(0)
提交回复
热议问题