翻转字符串
题目描述&思路提示:
先把字符串转化成数组,再借助数组的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;
}