标签:hunk size amp 正则 trend als where 中文 rest
前一阵子做的基础算法题,感觉做完后收获还蛮大的,现在将自己的做法总结出来,供大家参考讨论。基本上做到尽量简短有效,但有些算法还可以继续简化,比如第七题若采用正则表达式来匹配,则一行代码就可以完成需求。欢迎大家提出不同解法。末尾有FCC的链接,感兴趣的同学可以去做一做。
function reverseString(str) { var arr=str.split(""); str=arr.reverse().join(""); return str; } reverseString("hello");
function factorialize(num) { return (num<1) ? num = 1 : num*factorialize(num-1); }
如果给定的字符串是回文,返回true
,反之,返回false
。如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
function palindrome(str) { var p=/\s+|[,._():/\-]/gi; var pstr=str.replace(p,""); var arr=pstr.split(""); var restr=arr.reverse(); var newstr=""; for (var i=0; i<arr.length; i++){ newstr+=arr[i]; } if(newstr.toLowerCase()==pstr.toLowerCase()){ return true; } return false; } palindrome("fye");
function findLongestWord(str) { var wordArr=str.split(" "); var wordLengthArr=[]; var num=0; for (var i=0; i<wordArr.length; i++){ wordLengthArr.push(wordArr[i].length); } for (i=0; i<wordLengthArr.length; i++){ if(num<wordLengthArr[i]){ num=wordLengthArr[i]; } } return num; } findLongestWord("The quick brown fox jumped over the lazy dog");
function toFirstUpper(word){ return word.substring(0,1).toUpperCase()+word.substring(1).toLowerCase(); } function titleCase(str) { var wordArr=str.split(" "); for (var i=0; i<wordArr.length; i++){ wordArr[i]=toFirstUpper(wordArr[i]); } str=wordArr.join(" "); return str; } titleCase("I‘m a little tea pot");
如:[[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]
应该返回 [27,5,39,1001]
function largestOfFour(arr) { var newArr=[]; var index=0; for (var i=0; i<arr.length; i++){ for (var j=0; j<arr[i].length; j++){ if(arr[i][index]<arr[i][j]){ index=j; } } newArr.push(arr[i][index]); } return newArr; }
str
)是否以指定的字符串(target
)结尾。如果是,返回true;如果不是,返回false。如:confirmEnding("He has to give me a new name", "name")
应该返回 true
confirmEnding("He has to give me a new name", "na")
应该返回 false.
function confirmEnding(str, target) { var targetLength=target.length; var strEnd=str.substr(str.length-targetLength); if(strEnd==target){ return true; } return false; }
num
次,如果num
是一个负数则返回一个空字符串。如:repeat("abc", 3)
应该返回 "abcabcabc"
repeat("abc", -2)
应该返回 ""
function repeat(str, num) { var originalStr=str; if(num<=0){ return ""; } else{ for(var i=1; i<num; i++){ str+=originalStr; } return str; } }
num
长,则把多余的部分用...
来表示。 说明:插入到字符串尾部的三个点号也会计入字符串的长度。但如果指定的参数num
小于或等于3,则添加的三个点号不会计入字符串的长度。
如:truncate("A-tisket a-tasket A green and yellow basket", 11)
应该返回 "A-tisket..."
truncate("Absolutely Longer", 2)
应该返回 "Ab...".
function truncate(str, num) { // Clear out that junk in your trunk if(num<=3){ str=str.slice(0,num)+"..."; return str; } else if(num>=str.length){ return str; } else{ str=str.slice(0,num-3)+"..."; return str; } }
arr
按照指定的数组大小size
分割成若干个数组块。说明:例如:chunk([1,2,3,4],2)=[[1,2],[3,4]]; chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]];
如:chunk([0, 1, 2, 3, 4, 5], 3)
应该返回 [[0, 1, 2], [3, 4, 5]]
chunk([0, 1, 2, 3, 4, 5, 6], 3)
应该返回 [[0, 1, 2], [3, 4, 5], [6]]
function chunk(arr, size) { var newArrLength=Math.ceil(arr.length/size); var innerArr=[]; for (var i=0; i<newArrLength; i++){ innerArr.push(arr.splice(0,size)); } return innerArr; }
n
个元素后还剩余的元素,截断从索引0开始。如:slasher([1, 2, 3], 2)
应该返回 [3]
slasher([1, 2, 3], 9)
应该返回 []
.
slasher([1, 2, "chicken", 3, "potatoes", "cheese", 4], 5)
应该返回 ["cheese", 4]
function slasher(arr, howMany) { arr.splice(0,howMany); return arr; }
说明:["hello", "Hello"]
应该返回true,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。
["hello", "hey"]
应该返回false,因为字符串"hello"并不包含字符"y"。
["Alien", "line"]
应该返回true,因为"line"中所有字符都可以在"Alien"找到。
function mutation(arr) { var exist; arr[0]=arr[0].toLowerCase(); arr[1]=arr[1].toLowerCase(); for(var i=0; i<arr[1].length; i++){ exist=arr[0].indexOf(arr[1].charAt(i)); if(exist==-1){ return false; } } return true; }
如:bouncer([7, "ate", "", false, 9])
应该返回 [7, "ate", 9]
bouncer([false, null, 0, NaN, undefined, ""])
应该返回 []
function bouncer(arr) { return arr.filter(Boolean); }
如:destroyer([1, 2, 3, 1, 2, 3], 2, 3)
应该返回 [1, 1]
destroyer([2, 3, 2, 3], 2, 3)
应该返回 []
destroyer(["tree", "hamburger", 53], "tree", 53)
应该返回 ["hamburger"]
function destroyer(arr) { var destroyElementArr=[]; for(var i=1; i<arguments.length; i++){ destroyElementArr.push(arguments[i]); } var filtered=arguments[0].filter(function(num){ if(destroyElementArr.indexOf(num)<0){ return true; } return false; }); return filtered; }
说明:where([1,2,3,4], 1.5)
应该返回 1
。因为1.5
插入到数组[1,2,3,4]
后变成[1,1.5,2,3,4]
,而1.5
对应的索引值就是1
如:where([10, 20, 30, 40, 50], 35)
应该返回 3
where([2, 20, 10], 19)
应该返回 2
function where(arr, num) { arr.sort(function (a,b){return a-b;}); for (var i=0; i<arr.length; i++){ if(num<=arr[i]){ return i; } } return i; }
说明:ROT13密码的原理是字母会移位13个位置。由‘A‘ ? ‘N‘, ‘B‘ ? ‘O‘,以此类推。如第一个字母为A,就将其向后推13位变为N,第二个字母为B,就将其向后推13位变为O,以此类推。当遇上字母N时,又将其向前推13位变为A,以此类推。具体有关ROT13的解释可参考 http://www.baike.com/wiki/ROT13&prd=so_1_doc 。另外,所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。
如:rot13("SERR PBQR PNZC")
应该解码为 "FREE CODE CAMP"
rot13("SERR YBIR?")
应该解码为 "FREE LOVE?"
rot13("GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK.")
应该解码为 "THE QUICK BROWN DOG JUMPED OVER THE LAZY FOX."
function rot13(str) { str=str.replace(/[A-Z]/g,function (word){ if(word>="N"){ b=String.fromCharCode(word.charCodeAt(0)-13); } else{ b=String.fromCharCode(word.charCodeAt(0)+13); } return b; }); return str; }
FCC中文网:https://freecodecamp.cn
欢迎大家一起交流学习
标签:hunk size amp 正则 trend als where 中文 rest
原文地址:http://www.cnblogs.com/zsqos/p/fcc01.html