FCC-Missing Letters

2017-11-17  本文已影响0人  zooeydotmango

从传递进来的字母序列中找到缺失的字母并返回它。
如果所有字母都在序列中,返回 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");
上一篇下一篇

猜你喜欢

热点阅读