free code camp Missing letters问题解答

Missing letters 


从传递进来的字母序列中找到缺失的字母并返回它。

如果所有字母都在序列中,返回 undefined。

 

网上搜的一些答案,往往不能满足符合条件输入都有符合条件的输出

比如:abe  应该返回cd;但大多只返回c

abcgi应该返回defh;但有的只返回了def

借鉴他们的思路,写了一个,完成了任务;不过没考虑时间复杂度优化问题

抛砖引玉,看到的可以动手改改....

这是一些对你有帮助的资源:

  • String.charCodeAt()
  • String.fromCharCode()

思路:

把字符串转为字母数组

比较相邻两个字母元素的charcode之差

如果差等于1,说明两个字母中间没有缺失字母,不做处理

如果差不等于1,则说明二者之间缺失字母

缺失的第一个字母的charcode等于前一个字母的charcode+1

缺失的最后一个字母的charcode等于后一个字母的charcode-1

通过循环把缺失的字母加入到一个字符串变量newStr中

最后判断newStr,如果为空就返回undefined

否则返回newStr

  • function fearNotLetter(str){
        var arr=str.split("");
        var newStr="";//输出的字符串
        for(var i=1;i

    方法二:过滤法

  • 以给定字符串的起始和末尾元素建立一个不缺失任何元素的新数组

  • 比如str="abf";转为数组arr1=['a','b','f'];

  • 建立一个数组arr2=['a','b','c','d','e','f']

  • 过滤这个数组,arr2;过滤条件是arr2独有的元素留下(即arr2中有,而arr1中没有的)

  • function fearNotLetter(str){
        var arr1=str.split("");
        var start=arr1[0].charCodeAt();
        var end=arr1[arr1.length-1].charCodeAt();
        //创建一个数组arr2,字母是完全连续的,数组的第一个元素和最后一个元素分别和arr1的起始和结束元素相同
        var arr2=new Array(end-start+1);
        for(var i=0;i

    欢迎交流指正.......

你可能感兴趣的:(前端)