整理下w3cschool上,编程挑战的算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了整理下w3cschool上,编程挑战的算法相关的知识,希望对你有一定的参考价值。
翻转字符串
先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。
你的结果必须得是一个字符串
1 /*function reverseString(str) { 2 var arr=str.split(""); 3 arr.reverse(); 4 str=arr.join(""); 5 return str; 6 }*/ 7 8 function reverseString(str){ 9 var chars=new Array(100);//顺序栈 10 var top=-1;//顶指针 11 for(i=0;i<str.length;i++){ 12 chars[i]=str.charAt(i);//存数据 13 top++; 14 } 15 str="";//清空字符串 16 for(top;top>=0;top--){ 17 str+=chars[top];//取数据 18 } 19 return str; 20 } 21 22 reverseString("hello");
计算一个整数的阶乘
如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。
阶乘通常简写成 n!
例如: 5! = 1 * 2 * 3 * 4 * 5 = 120
1 function factorialize(num) { 2 var temp=1; 3 for (var i=1;i<=num;i++){ 4 temp*=i; 5 } 6 num=temp; 7 return num; 8 } 9 10 factorialize(5);
如果给定的字符串是回文,返回true
,反之,返回false
。
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。
函数参数的值可以为"racecar"
,"RaceCar"
和"race CAR"
。
1 function palindrome(str) { 2 // Good luck! 3 //字符串倒排序 4 5 //转换成小写字符串,同一大小写 6 //正则表达式不懂 7 var str1=str.toLowerCase(); 8 str1=str1.replace(/[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\‘|\,|\<|\.|\>|\/|\?]/g,""); 9 //分割成数组 10 var arr=str1.split(""); 11 12 //数组倒排序 13 arr.reverse(); 14 //转换字符串 15 var str2=arr.join(""); 16 17 //条件语句 18 /*if(str1==str2){ 19 return true;} 20 else{return false;}*/ 21 return(str1==str2); 22 } 23 24 25 26 palindrome("eye");
找到提供的句子中最长的单词,并计算它的长度。
函数的返回值应该是一个数字。
1 function findLongestWord(str) { 2 var arr=str.split(" "); 3 var temp=0; 4 for(i=0;i<arr.length;i++){ 5 var str1=arr[i]; 6 temp=temp>str1.length?temp:str1.length; 7 } 8 return temp; 9 } 10 11 findLongestWord("The quick brown fox jumped over the lazy dog");
确保字符串的每个单词首字母都大写,其余部分小写。
像‘the‘和‘of‘这样的连接符同理。
1 function titleCase(str) { 2 var arr=str.split(" "); 3 var str1=""; 4 //遍历数组 5 for(i=0;i<arr.length;i++){ 6 //把每段字符串第一个字母大写 7 var strTemp=arr[i]; 8 var strTiQu1=strTemp.slice(0,1); 9 strTiQu1=strTiQu1.toUpperCase(); 10 var strTiQu2=strTemp.slice(1); 11 strTiQu2=strTiQu2.toLowerCase(); 12 arr[i]=strTiQu1+strTiQu2; 13 } 14 for(i=0;i<arr.length-1;i++){ 15 str1+=arr[i]+" "; 16 } 17 var i=arr.length; 18 str1+=arr[i-1]; 19 return str1; 20 } 21 22 titleCase("I‘m a little tea pot");
右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。
提示:你可以用for循环来迭代数组,并通过arr[i]
的方式来访问数组的每个元素。
1 function largestOfFour(arr) { 2 // You can do this! 3 for(var i=0;i<arr.length;i++){ 4 arr[i]=maxOfArr(arr[i]); 5 } 6 return arr; 7 } 8 //计算单个数组最大值 9 function maxOfArr(arr) { 10 var max=arr[0]; 11 for(var i=1;i<arr.length;i++){ 12 max=max>arr[i]?max:arr[i]; 13 } 14 return max; 15 } 16 17 largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
检查一个字符串(str
)是否以指定的字符串(target
)结尾。
如果是,返回true;如果不是,返回false。
1 function confirmEnding(str, target) { 2 // "Never give up and good luck will find you." 3 // -- Falcor 4 //声明两个数组用于存储 5 var arr1=[],arr2=[]; 6 //用for循环存储字符 7 var i; 8 for(i=0;i<str.length;i++){ 9 arr1[i]=str[i]; 10 } 11 for(i=0;i<target.length;i++){ 12 arr2[i]=target[i]; 13 } 14 //采用while循环倒序比较 15 var j=arr1.length-1; 16 i=arr2.length-1; 17 while(i>=0){ 18 if(arr2[i]==arr1[j]){ 19 i--; 20 j--; 21 } 22 else{ 23 str=false; 24 break; 25 } 26 str=true; 27 } 28 29 return str; 30 } 31 32 confirmEnding("Bastian", "n");
重要的事情说3遍!
重复一个指定的字符串 num
次,如果num
是一个负数则返回一个空字符串。
1 function repeat(str, num) { 2 // repeat after me 3 if(num<=0){ 4 str=""; 5 } 6 else{ 7 var newstr=""; 8 for(i=0;i<num;i++){ 9 newstr+= str; 10 } 11 str=newstr; 12 } 13 14 return str; 15 } 16 17 repeat("abc", 3);
截断一个字符串!
如果字符串的长度比指定的参数num
长,则把多余的部分用...
来表示。
切记,插入到字符串尾部的三个点号也会计入字符串的长度。
但是,如果指定的参数num
小于或等于3,则添加的三个点号不会计入字符串的长度。
1 function truncate(str, num) { 2 // Clear out that junk in your trunk 3 var arr=[]; 4 for(var i=0;i<str.length;i++){ 5 arr[i]=str[i]; 6 } 7 //字符串的长度比指定的参数num短 8 //直接输出 9 if(str.length<=num){ 10 return str; 11 } 12 //否则以下代码 13 var last="..."; 14 str=""; 15 if(num<=3){ 16 for(j=0;j<num;j++){ 17 str+=arr[j]; 18 } 19 str+=last; 20 console.log(str); 21 } 22 else{ 23 for(j=0;j<num-last.length;j++){ 24 str+=arr[j]; 25 } 26 str+=last; 27 console.log(str); 28 } 29 30 31 return str; 32 } 33 34 truncate("A-tisket a-tasket A green and yellow basket", 11);
以上是关于整理下w3cschool上,编程挑战的算法的主要内容,如果未能解决你的问题,请参考以下文章