【问题标题】:Find all missing letters in string (string is in alphabetical order)查找字符串中所有缺失的字母(字符串按字母顺序排列)
【发布时间】:2020-09-25 12:23:15
【问题描述】:

我正在尝试创建一个函数来查找字符串中所有缺失的字符并返回所有缺失的字母(字符串将按字母顺序排列)。

例如 findMissing('abcde') 应该返回 'fghijklmnopqrstuvwxyz'

这是我的代码,它返回第一个丢失的字母:

function findMissing(str) {
  for (var i = 0; i < str.length; i++) {
   
    var code = str.charCodeAt(i);
               
    if (code !== str.charCodeAt(0) + i) {
     
      return String.fromCharCode(code - 1);
    }
  }
  return undefined;
}
    
findMissing("abce");
   //returns 'd'

【问题讨论】:

  • for循环中的return语句导致循环退出
  • 我建议使用列表missing,最初为空,并写missing.push(String.fromCharCode(code -1));而不是return String.fromCharCode(code - 1);
  • 按照你的定义,为什么场景findMissing('abcde')会返回efghijklmnopqrstuvwxyz(包括e)?
  • @esqew 对不起,我打错了,现在已经修复了。

标签: javascript string algorithm


【解决方案1】:

我认为这要简单得多

const findMissing = (str) => {
  let missing = '';
  for (let s of 'abcdefghijklmnopqrstuvwxyz') {
    if (str.indexOf(s) === -1) missing += s;
  }
  return missing;
}

【讨论】:

    【解决方案2】:

    在 for 循环中使用 return 会导致循环中断。 使用数组填充,然后返回数组

    function findMissing(str) {
        var array = [];
        for (var i = 0; i < str.length; i++) {
    
            var code = str.charCodeAt(i);
               
            if (code !== str.charCodeAt(0) + i) {
     
                array.push(String.fromCharCode(code - 1));
            }
        }
        return array;
    }
    
    
    myArray = findMissing("abce");
    

    【讨论】:

    • 它仍然只返回“d”?
    • 不幸的是
    【解决方案3】:

    可能有其他解决方案,作为奖励。

    const a = 'abcdefghijklmnopqrstuvwxyz';
    const r = (s) => a.replace(/\w/g, (m) => s.includes(m) ? '' : m);
    
    console.log(r('abcd'));

    【讨论】:

      【解决方案4】:

      试试这个:

      function findMissing(str) {
          let allLetters = "abcdefghijklmnopqrstuvwxyz".split('');
          let inputLetters = str.split('');
          for (let i = 0; i < inputLetters.length; i++) {
              let index = allLetters.indexOf(inputLetters[i]);
              if(index != -1) allLetters.splice(index, 1);
          }
          return allLetters.join('');
      }
      

      【讨论】:

        【解决方案5】:

        按照您的原始代码方法进行一些小的更改:

        function findMissing(str) {
          let alphabet="abcdefghijklmnopqrstuvwxyz";
        
          for (var i = 0; i < str.length; i++) {
           
            var char = str.charAt(i);
        
            if (alphabet.indexOf(char)!==-1) {
              alphabet=alphabet.replace(char,'');
            }
          }
        
          return alphabet;
        }
        
        console.log(findMissing("abce"));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-23
          相关资源
          最近更新 更多