算法挑战

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

palindrome(回文)是指一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样


function palindrome(str) {
  str = str.replace(/[^A-Za-z0-9]/g, '').toLowerCase().split('');
  var t = str.every(function(v,i){
    return v == str[str.length-i-1];
  },str);
  return t;
}

2.返回提供的句子中最长的单词的长度

返回值应该是一个数字。

function findLongestWord(str) {
   var s=str.split(' ');
   var l=0;
   for (var i =0; i<s.length; i++) {
       if(s[i].length>l){
           l=s[i].length
       }
   }
return l;
}

findLongestWord("The quick brown fox jumped over the lazy dog");

3.返回一个字符串,确保字符串的每个单词首字母都大写,其余部分小写。

function titleCase(str) {
  var newStr = str.split(" ");
  for(var i=0; i<newStr.length; i++){
    newStr[i] = newStr[i].slice(0, 1).toUpperCase() + newStr[i].slice(1).toLowerCase();
  }
  return newStr.join(" ");
}

titleCase("I'm a little tea pot");

4.   在右边的大数组中包含了4个小数组,请分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新的数组。

function largestOfFour(arr) {
// You can do this!
var newArr=[];
var max=0;
for (var i = 0; i <arr.length; i++) {
   for(var j=0;j<arr[i].length;j++){
       if (arr[i][j]>max) {
           max=arr[i][j];
       } 
   }
   newArr[i]=max;
   max=0;
}
return newArr;
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

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

function confirmEnding(str, target) {
// "Never give up and good luck will find you."
// -- Falcor
if(target === str.substr(-target.length)){
    return true;
  }else{
    return false;
  }

}

confirmEnding("Bastian", "n");
6. 循环拼接一个指定的字符串  num 次,如果 num 是一个负数,则返回一个空字符串。
function repeat(str, num) {
// repeat after me
var newstr="";
if (num<=0) {
    return "";
} else {
    for (var i = 0; i < num; i++) {
        newstr+=new String(str);
    }
    return newstr;
}
}

repeat("abc", 3);
7.

 如果字符串的长度比给定的参数num长,则把多余的部分用...来表示。

切记,插入到字符串尾部的三个点号也会计入字符串的长度。

然而,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。

function truncate(str, num) {

  var newStr= "";

  if(str.length>num){

    if(num<=3){
      newStr =str.slice(0,num)+"..."; 
    }
    else{
      newStr =str.slice(0,num-3)+"...";
    }
    return newStr;

  }
  else{
        return str;
  }
}
truncate("A-tisket a-tasket A green and yellow basket", 11);


8.

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

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

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

8.1:

function chunk(arr,size){		
    var arr1=[];		
    for(var i=0;i<arr.length;i=i+size){		 
        var arr2=arr;          
        arr1.push(arr2.slice(i,i+size));		
    }		
    return arr1;	
}

chunk(["a", "b", "c", "d"], 2);

8.2:

function chunk(arr,size){         
    var chunk=[];         
    while(arr.length>0){             
        chunk.push(arr.splice(0,size));         
    };    
    return chunk;
}     

chunk(["a", "b", "c", "d"], 2);
9. 返回一个数组被截断 n 个元素后还剩余的元素,从索引0开始 截断
function slasher(arr, howMany) {
// it doesn't always pay to be first
return arr.slice(howMany);

}

slasher([1, 2, 3], 2);
10.

如果数组第一个字符串元素包含了第二个字符串元素的所有字符,则函数返回true。

举例,["hello", "Hello"]应该返回true,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。

["hello", "hey"]应该返回false,因为字符串"hello"并不包含字符"y"。

["Alien", "line"]应该返回true,因为"line"中所有字符都可以在"Alien"找到。

function mutation(arr){
    for (var i = 0 ; i < arr[1].length ; i++){
        if(arr[0].toUpperCase().indexOf(arr[1].charAt(i).toUpperCase()) == -1){
            return false;
        }
    }
    return true;
}
mutation(["hello", "hey"]);
11.

删除数组中的所有的假值。

在JavaScript中,假值有falsenull0""undefined 和NaN

function bouncer(arr) {
// Don't show a false ID to this bouncer.
return arr.filter(d=>d);
}

bouncer([7, "ate", "", false, 9]);
12.  实现一个 destroyer 函数,第一个参数是初始数组, 后跟一个或多个参数。 从初始数组中删除与这些参数具有相同值的所有元素。
function destroyer() {
  var argu = arguments
  var arr1 = argu[0];
  var arr2 = arr1.filter(function(val) {
    var a = true;
    for (var i = 1; i < argu.length; i++) {
      if (val === argu[i]) {
        a = false;
      }
    }
    return a;
  })
  return arr2
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
13.

  先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。

举例:where([1,2,3,4], 1.5) 应该返回 1。因为1.5插入到数组[1,2,3,4]后变成[1,1.5,2,3,4],而1.5对应的索引值就是1

同理,where([20,3,5], 19) 应该返回 2。因为数组会先排序为 [3,5,20]19插入到数组[3,5,20]后变成[3,5,19,20],而19对应的索引值就是2

function where(arr, num) {
 // Find my place in this sorted array.
 //注意sort() 排序规则
 arr.sort(function(a,b){
   return a- b;
 });
 
 for(var i =0;i<arr.length;i++){
    
  if(arr[i]>num | arr[i] == num){
     
   return i;
  }
 }
 return arr.length;
}
14.

下面我们来介绍著名的凯撒密码Caesar cipher,又叫移位密码。

移位密码也就是密码中的字母会按照指定的数量来做移位。

一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔'O',以此类推。

写一个ROT13函数,实现输入加密字符串,输出解密字符串。

所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,就跳过它们。

function rot13(str) { // LBH QVQ VG!
 var  str1 = [];   
  for (var i = 0; i < str.length; i++ ) {  
    var num = str[i].charCodeAt();  
  if (num >= 65 && num <= 77)  
      num = num + 13;  
  else if (num > 77 && num < 91)  
      num = num - 13;  
   str1.push(String.fromCharCode(num));  
    }  
  return str1.join("");  
}

// Change the inputs below to test
rot13("SERR PBQR PNZC");

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值