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