整理下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上,编程挑战的算法的主要内容,如果未能解决你的问题,请参考以下文章

高级脚本算法挑战

HTML5&CSS挑战

[编程 | Phthon | 02] Python3常用算法整理

学习编程算法的这几个网站

Java并发编程的挑战

编程思想与算法