20180801

翻转字符串


题目描述&思路提示:
先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。
代码:

function reverseString(str) {
  str = str.split("");
  str = str.reverse();
  str = str.join("");
  return str;
}

计算阶乘


思路:
递归
代码:

function factorialize(num) {
  var n = 1;
  if(num == 0 || num == 1){
    return n;
  }
  else{
     return num*factorialize(num-1);
  }
}

查回文字符串


题目描述:
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
去掉字符串多余的标点符号和空格,如果给定的字符串是回文,返回true,反之,返回false。
测试用例:
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.
思路:
先把字符串中的字母全都转化成小写,分割字符串存入数组一,过滤数组一中的标点空格,逆置数组并存入数组二,合并数组成为新的字符串,比较两个字符串是否相同得出字符串是否为回文字符串。
代码:

function palindrome(str) {
  str = str.toLowerCase();
  var arr = str.split("");
  arr = arr.filter(function(x){
    return (x == "1")||(x.charCodeAt() >= 97 && x.charCodeAt() <= 122);
  });
  var rra = [];
  for(var i = 0; i < arr.length; i++){
    rra[i] = arr[arr.length - i-1];
  }
  var arrStr = arr.join("");
  var rraStr = rra.join("");
  if(arrStr == rraStr){
    return true;
  }
  else{
    return false;
  }
}

问题和解决:
问题1:如何去掉标点符号和空格
解决:用filter()方法过滤ASCII码不在小写字母ASCII码范围内的元素。由于有一个测试用例里有数字1,本应该通过同样的方法使数组不被过滤,但是我选择了只不过滤1以通过测试。
问题2:数组直接赋值rra = arr是引用传递,使用reverse()方法时原数组也被倒置,所有返回true的测试都通过,返回false的测试都不通过
解决:利用for循环挨个赋值,并在赋值的过程中完成倒置

找出最长单词


题目描述:
在句子中找出最长的单词,并返回它的长度。
测试用例:
findLongestWord("The quick brown fox jumped over the lazy dog")应该返回一个数字
findLongestWord("The quick brown fox jumped over the lazy dog") 应该返回 6.
findLongestWord("May the force be with you")应该返回 5.
findLongestWord("Google do a barrel roll")应该返回 6.
findLongestWord("What is the average airspeed velocity of an unladen swallow")应该返回 8.
思路:
先把句子以空格为参照分割为字符串数组,再遍历数组把每个元素分割成字符数组,读取数组长度即单词长度存入数组二,给数组二排序返回最大值。
私以为这个算法应该同时返回单词和长度,稍微再加一点难度。
代码:

function findLongestWord(str) {
  var arr = str.split(" ");
  var arrLen = arr.map(function(s){
    var l = s.split("");
    return l.length;
  });
  var max = arrLen.reduce(function(a,b){
    return (a>b)?a:b;
  });
  return max;
}

句中单词首字母大写


测试用例:
titleCase("I'm a little tea pot") 应该返回一个字符串
titleCase("I'm a little tea pot") 应该返回 "I'm A Little Tea Pot".
titleCase("sHoRt AnD sToUt") 应该返回 "Short And Stout".
titleCase("HERE IS MY HANDLE HERE IS MY SPOUT") 应该返回 "Here Is My Handle Here Is My Spout".
思路:
先用以空格为参照把句子分成单词存入数组。再遍历数组把每个元素分割成字符数组,把每个数组的所有元素都变成小写,再把第一个元素都变成大写,再把这些数组都合并成单词,最后再加入空格把单词合并成句子。
代码:

function titleCase(str) {
  var arr = str.split(" ");
  var arrStr = arr.map(function(s){
    var l = s.split("");
    l = l.map(function(x){
      return x.toLowerCase();
    });
    l[0] = l[0].toUpperCase();
    s = l.join("");
    return s;
  });
  var newStr = arrStr.join(" ");
  return newStr;
}

找出多个数组中的最大数


题目描述:
一个大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。
测试用例:
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])应该返回一个数组
largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]])应该返回 [27,5,39,1001].
largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]])应该返回 [9, 35, 97, 1000000].
思路:
map()方法遍历大数组,sort()给小数组排序。
代码:

function largestOfFour(arr) {
  var arrMax = arr.map(function(s){
    s.sort(function(a,b){
      return b-a;
    });
    s = s[0];
    return s;
  });  
  return arrMax;
}

你可能感兴趣的:(20180801)