Missing letters
从传递进来的字母序列中找到缺失的字母并返回它。
如果所有字母都在序列中,返回 undefined。
思路:
(1)直接将字符串转化为数字按顺序放入数组arr中;
(2)如果没有缺失的字母,数组的最大值减最小值加1应该等于数组的长度,利用这一特点,创建这样一个理想的没有缺失的数组newArr;
(3)从newArr中剔除与数组arr相同的元素,这样就找到了丢失字母的数字,由于可能不止一个遗漏,所以我将其装进了数组;
(4)把数组的元素数字转化为字母,利用join()方法转化为字符串;
知识点:
(1)String.charCodeAt()返回值是一表示给定索引处字符的 UTF-16 代码单元值的数字;如果索引超出范围,则返回 NaN
;
1 for (var i = 0; i < str.length; i++) { 2 //直接将字符串转化为数字按顺序放入数组arr中 3 arr.push(str.charCodeAt(i)); 4 }
(2)String.fromCharCode()方法返回使用指定的Unicode值序列创建的字符串,
1 for (var k = 0; k < miss.length; k++) { 2 //将数组中的数字再一次转化为字符,此时还是数组形式 3 miss[k] = String.fromCharCode(miss[k]); 4 }
注意,使用方式是 String.fromCharCode(num),括号里放入所需要转化的数字;
代码:
1 function fearNotLetter(str) { 2 var arr = []; 3 var newArr = []; 4 var miss = []; 5 for (var i = 0; i < str.length; i++) { 6 //直接将字符串转化为数字按顺序放入数组arr中 7 arr.push(str.charCodeAt(i)); 8 } 9 var a = arr[arr.length - 1] - arr[0]; 10 11 if (arr.length - 1 != a) { 12 //如果没有缺失的字母,数组的最大值减最小值加1应该等于数组的长度 13 for (var j = 0; j < a + 1; j++) { 14 //利用这一特点,创建这样一个理想的没有缺失的数组newArr 15 newArr[j] = arr[0] + j; 16 } 17 //从newArr中剔除与数组arr相同的元素 18 miss = newArr.filter(function (value) { 19 return arr.indexOf(value) === -1; 20 }); 21 for (var k = 0; k < miss.length; k++) { 22 //将数组中的数字再一次转化为字符,此时还是数组形式 23 miss[k] = String.fromCharCode(miss[k]); 24 } 25 //将数组转化为字符串(我这里考虑了缺失不止一个字母的情况) 26 var letter = miss.join(‘‘); 27 return letter; 28 } else { 29 //没有缺失的字母,返回undefined 30 return undefined; 31 } 32 33 } 34 35 fearNotLetter("abce");
时间: 2024-10-12 12:45:59