zoukankan      html  css  js  c++  java
  • Missing letters

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

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

    function fearNotLetter(str) {
      var len=str.length;
      //str中第一个字符的Unicode值
      var start=str.charCodeAt(0);
      //str中最后一个字符的Unicode值
      var end=str.charCodeAt(len-1);
      var arr=[];
      var j=0;
      for(var i=start;i<=end;i++){
        //循环遍历,如果str中字符不等于Unicode值i对应的字符
        //说明str中该字符缺失,push入str数组中
        //注意:str中数组下标j要保持不变,继续与下一个Unicode值所对应的字符比较
        if(str[j]!=String.fromCharCode(i)){
          arr.push(String.fromCharCode(i)); 
          //为了保持下标j不变,这里要减1,因为循环会自动加1
          j--;
        }
        j++;
      }
      if(arr.length===0)
        return undefined;
      else
        //return arr.toString();
        return arr.join('');  
    }
    
    fearNotLetter("abcdefgho");

    提示

    String.charCodeAt()

    String.fromCharCode()

    思路

    如果传进来的字母序列只漏掉一个字符的话,这道题目还是很容易解决的,不用很多代码量就能验证通过。但是,题面说的是“找到缺失的字母”而不是“找到缺失的单个字母”,所以出于解题的完整性考虑,即使测试题目中验证的也都是缺失单个字符的情况,我们还是用数组解决它,使得即使缺失了多个字符也能返回正确结果。

    把传入的字母序列转化为数组;声明空数组,准备推入值作为最后的返回结果:

    var arr = str.split("");
    var temp = [];

    假设传入的是一个字母序列连续的字符串,那么它的每个字符的 unicode 值应当是依次递增 1 的。

    //字符串首位字符编码
    var start = str.charCodeAt(0);
    //字符串末尾字符编码
    var end = str.charAt(str.length - 1).charCodeAt(0);
    for(var i = start; i < end + 1; i++){
        //do something...
      }

    解释一下这个 for() 循环的条件。这里把传入的 str 当做一个字母序列连续的字符串看待。 i 代表当前字符的字符编码,即 unicode 值。

    我们来看一下循环内部应该进行的操作:

    var item = String.fromCharCode(i);
        if(arr[0] !== item){  
          temp.push(item);
        }else{
          arr.shift();
        }

    item 是当前字符串是 unicode 值依次递增的连续字符串的情况下,当前项的值。

    如果当前项的值就是字符串首项,说明它不是我们要找的值,移除str转化的数组arr的首项;如果它不是字符串首项,说明这个位置本应该出现的值被其它值顶替,把这个位置本应该出现的值收入将要返回的结果集中。

    整个函数的返回值需做以下判断:

    if(temp.length === 0){
        return undefined;
      }else{
        return temp.join("");
      }


    function fearNotLetter(str) {
      var arr = str.split("");
      var temp = [];
      var start = str.charCodeAt(0);
      var end = str.charAt(str.length - 1).charCodeAt(0);
      for(var i = start; i < end + 1; i++){
        var item = String.fromCharCode(i);
        if(arr[0] !== item){  
          temp.push(item);
        }else{
          arr.shift();
        }
      }
      if(temp.length === 0){
        return undefined;
      }else{
        return temp.join("");
      }  
    }
  • 相关阅读:
    Linux Socket函数close() 与 shutdown()区别
    Android Performance Patterns S01E03
    Android Performance Patterns S01E02
    Android Performance Patterns S01E01
    Java类初始化顺序
    原子性,可见性,有序性
    UML类图
    Linux 五种IO模型
    Linux学习笔记(一)
    线程的生命周期-java
  • 原文地址:https://www.cnblogs.com/fffangrui/p/6110329.html
Copyright © 2011-2022 走看看