美文网首页
FCC-Missing Letters

FCC-Missing Letters

作者: zooeydotmango | 来源:发表于2017-11-17 15:53 被阅读0次

    从传递进来的字母序列中找到缺失的字母并返回它。
    如果所有字母都在序列中,返回 undefined。
    fearNotLetter("abce")应该返回 "d"。
    fearNotLetter("abcdefghjklmno")应该返回 "i"。
    fearNotLetter("bcd")应该返回 undefined。
    fearNotLetter("yz")应该返回 undefined。

    我错误理解了返回缺失字母的意思,认为如果是乱序的字母,需在最大和最小字母范围内返回缺失的字母,如果多个字母连续丢失,同样按顺序返回,所以思路先转换为数组-ASCII编码-排序-pre-cur如果不等于1返回并在数组中插入pre-cur-得到缺失字母的数组-判断数组长度-反编码并join
    事实说明我想多了,这是病

    function fearNotLetter(str) {
      var strArr = str.split('');
      var result=[];
      var strArrNum =strArr.map(function(v){
        return v.charCodeAt();
      });
      strArrNum = strArrNum.sort(function(a,b){
        return b-a;
      });
      for(var i=0;i<strArrNum.length;i++){
        if(strArrNum[i]-strArrNum[i+1] > 1){
          result.push(strArrNum[i]-1);
          strArrNum.splice(i+1,0,strArrNum[i]-1);
        }
      }
      if(result.length>0){
        return result.map(function(v){return String.fromCharCode(v);}).join('');
      }return undefined;
    }
    fearNotLetter("yz");
    
    

    但是实际上根本不需要排序,给出的题目是排好的,并且只丢失一个字母,所以直接判断前后差是否为1就可以

    function fearNotLetter(str) {
      var result='';
      for(var i = str.length-1;i>0;i--){
        if((str.charCodeAt(i)-str.charCodeAt(i-1))!=1){       
          result=String.fromCharCode(str.charCodeAt(i)-1);
        }
      } 
    //循环的i值如果=str.length时会有null最好写>1
    if(result===''){
      result = undefined;
    }
      return result;
    }
    fearNotLetter("bcd");
    

    相关文章

      网友评论

          本文标题:FCC-Missing Letters

          本文链接:https://www.haomeiwen.com/subject/sxejvxtx.html