zoukankan      html  css  js  c++  java
  • js中字符和数组一些基本算法题

        最近在刷 fcc的题,跟升级打怪一样,一关一关的过,还挺吸引我的。今天抽时间把 Basic Algorithm Scritping  这部分题做了,根据一些提示,还是比较简单的。有些题的处理方式 方法,我想值得借鉴。比如在项目中有时候要处理一个字符,如果想不到一些相关的方法,还挺费事的,所以,在此记录下来,如果以后遇到一些字符或者数组处理,可以来翻翻这篇文章,希望以此得到一些提示而不是去翻文档。

      看到此博文的博友,有更好更简单的代码或者好的想法,请留言交流(我一直觉得只有学习别人的优秀代码才能进步更快,思维更灵活)。对于初学者,不看代码自己试着做一遍呗。(以下题目都不用考虑参数类型,严格来说应该对参数类型做一个判断,eg:typeOf(arg) === number)

    1.Reverse a String


    翻转字符串

    先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。

    你的结果必须得是一个字符串

    function reverseString(str) {
      str = str.split('').reverse().join('');
     
      return str;
    }
    
    reverseString("hello");
    View Code

    2.Check for Palindromes 


    如果给定的字符串是回文,返回true,反之,返回false

    如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。

    注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。

    函数参数的值可以为"racecar""RaceCar""race CAR"

    function palindrome(str) {
      // Good luck!
      
      str=str.replace(/[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?]/g,"");  //去除标点符号,这是我百度的,js的正则不是很熟悉
      str = str.replace(/\s+/g);
      str = str.toLowerCase();
      var arr = str.split('');
          arr = arr.reverse();
       var str1 = arr.join("");
      if(str === str1){
      return true;}
      return false;
    }
    
    
    
    palindrome("eye");
    
    /*
    
    palindrome("eye") 应该返回一个布尔值
    palindrome("eye") 应该返回 true.
    palindrome("race car") 应该返回 true.
    palindrome("not a palindrome") 应该返回 false.
    palindrome("A man, a plan, a canal. Panama") 应该返回 true.
    palindrome("never odd or even") 应该返回 true.
    palindrome("nope") 应该返回 false.
    palindrome("almostomla") 应该返回 false.
    palindrome("My age is 0, 0 si ega ym.") 应该返回 true.
    palindrome("1 eye for of 1 eye.") 应该返回 false.
    palindrome("0_0 (: /-\ :) 0-0") 应该返回 true.
    
    
    
    */
    View Code

    3.Title Case a Sentence


    确保字符串的每个单词首字母都大写,其余部分小写。(eg:titleCase("I'm a little tea pot") 应该返回 "I'm A Little Tea Pot".   titleCase("sHoRt AnD sToUt") 应该返回 "Short And Stout".)

    /*这题很简单,主要是要明白  split() 是把字符串分割成数组 
    join() 是把 数组变成字符串  
    toLowerCase() toUpperCase() 大小写转换,注意,只对字母有效,其他字符(eg:/,!@)无效
    */
    
    function titleCase(str) {
     str = str.split(" ");//按照空格把字符串分割成数组
        for (var i = 0; i < str.length; i++) {
            str[i] = str[i].toLowerCase();
            str[i] = str[i].substring(0, 1).toUpperCase() + str[i].substring(1);
        }
        return str.join(" ");//通过空格把数组连接成字符串
    }
    
    titleCase("I'm a little tea pot");
    View Code

    4.Confirm the Ending


    检查一个字符串(str)是否以指定的字符串(target)结尾。

    如果是,返回true;如果不是,返回false。例如:confirmEnding("Bastian", "n") 应该返回 true.  confirmEnding("Connor", "n") 应该返回 false.  confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification") 应该返回 false.

    function confirmEnding(str, target) {
      // "Never give up and good luck will find you."
      // -- Falcor
      
      return str.substr(str.length-target.length) == target ? true:false;
    }
    
    confirmEnding("Bastian", "n");
    confirmEnding("He has to give me a new name", "na");
    /*
    confirmEnding("Bastian", "n") 应该返回 true.
    confirmEnding("Connor", "n") 应该返回 false.
    confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification") 应该返回 false.
    confirmEnding("He has to give me a new name", "name") 应该返回 true.
    confirmEnding("He has to give me a new name", "me") 应该返回 true.
    confirmEnding("He has to give me a new name", "na") 应该返回 false.
    confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain") 应该返回 false.
    */
    View Code

    5.Repeat a string repeat a string


    重要的事情说3遍!

    重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串。例如:

    repeat("*", 3) 应该返回"***".
    repeat("abc", 3) 应该返回"abcabcabc".
    repeat("abc", 4) 应该返回"abcabcabcabc".
    repeat("abc", 1) 应该返回"abc".
    repeat("*", 8) 应该返回"********".
    repeat("abc", -2) 应该返回"".

    当你完成不了挑战的时候,记得开大招'Read-Search-Ask'。

    function repeat(str, num) {
      // repeat after me
      var newstr = str;
      if(num >1){
        for(var i = 1; i< num ; i ++){
          str +=newstr;
        }
        return str;
      }else if(num == 1){
        return str;
      }else{
        return "";
      }
      
    }
    
    repeat("abc", 3);
    repeat("*", 3);
    View Code

    6.Chunky Monkey


    猴子吃香蕉可是掰成好几段来吃哦!

    把一个数组arr按照指定的数组大小size分割成若干个数组块。

    例如:chunk([1,2,3,4],2)=[[1,2],[3,4]];

    chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]];

     1 function chunk(arr, size) {
     2   // Break it up.
     3 var arr1 = [];
     4     for (var i = 0; i < arr.length; i = i + size) {
     5         var arr2 = arr;
     6         arr1.push(arr2.slice(i, i + size));
     7     }
     8     return arr1;
     9 }
    10 
    11 chunk(["a", "b", "c", "d"], 2);
    View Code

    7.Falsy Bouncer


    真假美猴王!

    删除数组中的所有假值。

    在JavaScript中,假值有falsenull0""undefinedNaN

    当你完成不了挑战的时候,记得开大招'Read-Search-Ask'。

  • 相关阅读:
    C语言利用fgetc复制拷贝文件内容
    linux 安装gcc 和 g++
    C宏定义和使用
    C的realloc的动态分配扩展和缩小内存
    C用malloc 向系统申请一个大小为n*4个字节的内存块
    GDB core命令的使用调试段错误
    GDB的安装
    C字符指针数组的使用
    C二维字符数组的使用及如何获取二维数组的总行数和总列数!
    C二维数组用指针地址遍历
  • 原文地址:https://www.cnblogs.com/zzllx/p/5769154.html
Copyright © 2011-2022 走看看