FCC 16个初级算法解
1.翻转字符串
function reverseString(str) {
var a=str.split("").reverse().join("");
return a;
}
reverseString("hello");
2.计算一个整数的阶乘
function factorialize(num) {
if(num===0){
return 1;
}
else{
var a=num;
for(var i=num;i>1;i--){
a=a*(i-1);
}
return a;
}
}
factorialize(5);
3.如果给定的字符串是回文,返回true
,反之,返回false
。如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
function palindrome(str) {
var str1=str.replace(/\W/g,"").replace(/\_/g,"").toLowerCase();
var str2=str.replace(/\W/g,"").replace(/\_/g,"").toLowerCase().split("").reverse().join("");
return str1==str2;
}
palindrome("eye");
4.找到提供的句子中最长的单词,并计算它的长度。
function findLongestWord(str) {
var arr=str.split(" ");
var leng=0;
for(var i=0;i<arr.length;i++){
if(arr[i].length>leng){
leng=arr[i].length;
}
}
return leng;
}
findLongestWord("The quick brown fox jumped over the lazy dog");
5.使字符串的每个单词首字母都大写,其余部分小写。
function titleCase(str) {
return str.toLowerCase().replace(/( |^)[a-z]/g, (x) => x.toUpperCase());
}
titleCase("I'm a little tea pot");
6.右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。
function largestOfFour(arr) {
var newarr=[];
for(var i=0;i<arr.length;i++){
var num=0;
for(var j=0;j<arr[i].length;j++){
if(arr[i][j]>num){
num=arr[i][j];
}
}
newarr[i]=num;
}
return newarr;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
7.检查一个字符串(str
)是否以指定的字符串(target
)结尾。如果是,返回true;如果不是,返回false。
function confirmEnding(str, target) {
var n=target.length;
var lastword=str.substr(-n,n);
return lastword==target;
}
confirmEnding("Bastian", "n");
8.重复一个指定的字符串 num
次,如果num
是一个负数则返回一个空字符串。
function repeat(str, num) {
var str1="";
for(var i=0;i<num;i++){
str1 +=str;
}
return str1;
}
repeat("abc", 3);
9.如果字符串的长度比指定的参数num
长,则把多余的部分用...
来表示。如果指定的参数num
小于或等于3,则添加的三个点号不会计入字符串的长度。
function truncate(str, num) {
if(str.length>num){
var arr=str.split("");
var newstr="";
if(num>3){
for(var i=0;i<num-3;i++){
newstr = newstr+arr[i];
}
}
else{
for(var j=0;j<num;j++){
newstr = newstr+arr[j];
}
}
return newstr+"...";
}
else {
return str;
}
}
truncate("A-tisket a-tasket A green and yellow basket", 11);
10.把一个数组arr
按照指定的数组大小size
分割成若干个数组块。
function chunk(arr, size) {
var newArray=[];
for(var i=0;i<arr.length;i+=size){
newArray.push(arr.slice(i,i+size));
}
return newArray;
}
chunk(["a", "b", "c", "d"], 2);
11.返回一个数组被截断n
个元素后还剩余的元素,截断从索引0开始。
function slasher(arr, howMany) {
arr.splice(0, howMany);
return arr;
}
slasher([1, 2, 3], 2);
12.如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。
function mutation(arr) {
var str0=arr[0].toLowerCase();
var str1=arr[1].toLowerCase();
var myarr=str1.split("");
var num=0;
for(var i=0;i<myarr.length;i++){
if (str0.indexOf(myarr[i]) !== -1){
num++;
}
}
return num==myarr.length;
}
mutation(["hello", "hey"]);
13.删除数组中的所有假值。在JavaScript中,假值有false
、null
、0
、""
、undefined
和 NaN
。
function bouncer(arr) {
var newArray = arr.filter(function(x){
return Boolean(x);
});
return newArray;
}
bouncer([7, "ate", "", false, 9]);
14.实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。
function destroyer(arr) {
var newArray = [];
for(var i = 1; i < arguments.length; i++){
newArray.push(arguments[i]);
}
var temp = arr.filter(function(x){
return newArray.indexOf(x) < 0;
});
return temp;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
15.先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。
function where(arr, num) {
arr.push(num);
arr.sort(function(a, b) {
return a - b;
});
for(var i=0;i<arr.length;i++){
if(arr[i]==num){
return i;
}
}
}
where([40, 60], 50);
16.rot13加密,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。
function rot13(str) {
return str.replace(/[a-z]/gi, function (x) {
return String.fromCharCode(x.charCodeAt(0) + (x.toLowerCase() < 'n' ? 13 : -13));
});
}
rot13("SERR PBQR PNZC");