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("");
      }  
    }
  • 相关阅读:
    【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)
    Educational Codeforces Round 73 (Rated for Div. 2)F(线段树,扫描线)
    【PAT甲级】1042 Shuffling Machine (20 分)
    【PAT甲级】1041 Be Unique (20 分)(多重集)
    【PAT甲级】1040 Longest Symmetric String (25 分)(cin.getline(s,1007))
    【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)
    Codeforces Round #588 (Div. 2)E(DFS,思维,__gcd,树)
    2017-3-9 SQL server 数据库
    2017-3-8 学生信息展示习题
    2017-3-5 C#基础 函数--递归
  • 原文地址:https://www.cnblogs.com/fffangrui/p/6110329.html
Copyright © 2011-2022 走看看