W3Cschool初级脚本算法难题解析——JS对数组和字符串的常见操作
最近无聊刷了一波W3Cschool上的前端课程,三天获得了前端基础编程实战课程通关证书(共226关)因为本科毕业设计做过前端所以比较容易完成。但对脚本算法是一窍不通,今天花了一点时间做了脚本算法编程实战课程的初级脚本算法。遇到了一些难点,不过有幸逐一解决了,每当解决一个算法的时候,感觉整个心情都舒畅起来。闲话结束,进入实战。
算法:1.寻找最长的单词
实验要求:返回提供的句子中最长的单词长度,返回值应该是一个数字。
[code]function findLongestWord(str) { shuzu=str.split(' ');//字符串转数组 var max=0; for(var i=0;i<shuzu.length;i++) { shuzu[i]=shuzu[i].split('');//数组每个元素中的字符串也转为数组形式 } for(var j=0;j<shuzu.length;j++) { if(shuzu[j].length>max){ max=shuzu[j].length;//取最长数组,返回其长度 } } return max; } findLongestWord("The quick brown fox jumped over the lazy dog");
本人写算法没什么章程,时间复杂度的暂时考虑不到,变量命名也毫无章法,还是个小菜鸟一枚。
上述的程度输出结果为 6 ,即最大字符串的长度为6(对应jumped)
算法:2. 设置首字母大写
要求:返回一个字符串,确保字符串的每个单词首字母都大写,其余部分小写。
[code]function titleCase(str) { str=str.toLowerCase();//将所有大写字符转为小写字符,这样后面只需对每个字符串的首个字符进行大写。 shuzu=str.split(' ');//字符串转数组,为了提取单个字符串 for(var i=0;i<shuzu.length;i++){ shuzu[i]=shuzu[i].split('');//字符串转数组,为了提取单个字符 shuzu[i][0]=shuzu[i][0].toUpperCase();//将首字符大写 shuzu[i]=shuzu[i].join('');//将修改好字符串转数组 } str=shuzu.join(' ');//将数组转为字符串 return str; } titleCase("I'm a little tea pot");
此程序输出结果为:I'm A Little Tea Pot
算法:3.寻找数组中最大值
要求:分别找到每个小数组中的最大值,将其串联为新的数组并输出。
[code]function largestOfFour(arr) { // You can do this! for(var i=0;i<arr.length;i++){ for(var j=0;j<arr[i].length;j++) { if(arr[i][0]<arr[i][j]) arr[i][0]=arr[i][j]; }//遍历每个小数组,将小数组第一个元素存放这个小数组中最大的元素 } for(var k=0;k<arr.length;k++){ arr[k]=arr[k][0];//将所有的小数组第一个元素存放在一起 } return arr; } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
输出结果:[5,27,39,1001]
算法:4.确认末尾字符
要求:检查一个字符串(str)是否以指定的字符串(target)结尾;
如果是,返回true,否则,返回false。
[code]function confirmEnding(str, target) { // "Never give up and good luck will find you." // -- Falcor target=target.split('');//将字符串转为数组,方便用数组下标进行元素的比较 var length=target.length; str=str.split('');//同上 var num=0; for(var i=str.length-length,j=0;i<str.length,j<target.length;i++,j++) { if(str[i]===target[j])//待比较的字符串从末尾倒数的相应位置与target进行一一比较 num+=1;//如果对应元素相等,就设标记+1 } if (num==target.length) return true;//如果相等的个数等于目标的个数则为真 return false; } confirmEnding("Bastian", "n");
返回值为 true
写到这个算法其实我就有点放弃了,休息了一会,看点剧在来做就又思想了。就像此算法的默认备注,加油把。
算法:5.去除数组中任意多个值
要求:实现一个destroyer函数,第一个参数是初始数组,后跟一个或多个参数。从初始数组中删除与这些参数具有相同值的所有元素。
[code]function destroyer(arr) { // Remove all the values for(var i=1;i<arguments.length;i++)//外循环控制形参数 { for (var j=0;j<arguments[0].length;j++)//内循环控制数组arr值 { if(arguments[0][j]==arguments[i]) { arr.splice(j,1); j--; } } } return arguments[0]; } destroyer([3,5,1,2,2], 2, 3, 5);
输出为[1]
因为算法太多了,中间我认为简单的就不写上来了
算法:6.数组排序并插入值
要求:先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。
如 where([1,2,3,4],1.5) 返回1
[code]function where(arr, num) { // Find my place in this sorted array. var num2=0; for(var i=0;i<arr.length;i++) for(var j=0;j<arr.length;j++) { if(arr[j]>arr[j+1]) { var temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } }/*给的提示说可以用数组的sort()排序方法,可是并不能使用,因此在实现直接用了冒泡排序算法,对数组进行了从大到小的排序*/ for(var k=0;k<arr.length;k++) { if(arr[k]<num&&arr[k+1]>=num) { num2=k+1; }//找到目标值num对应的位置 } if(arr[arr.length-1]<num) num2=arr.length;//要是该值在数组末尾,则单独为其加1 return num2; } where([2,10,15], 19);
输出结果为: 3
算法:7.位移密码
要求:移位密码就是密码中的字母会按照指定的数量来做移位。
写一个ROT13函数,字母会移位13个。
编写一个ROT13函数,实现输入加密字符串,输出解密字符串。
注意:所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,就跳过它们。
[code]function rot13(str) { // LBH QVQ VG! var arr=""; var arr2=""; arr=str.split(''); for(var i=0;i<arr.length;i++) { arr[i]=str.charCodeAt(i); if(arr[i]>=65&&arr[i]<=77) {arr[i]=arr[i]+13;} else if(arr[i]>77&&arr[i]<=90) { arr[i]=(arr[i]+13)%90+64; }//对移除了Z的字母,超出的部分从A开始计算 arr[i]=String.fromCharCode(arr[i]);//将改变后的ASCII码转为字符 } str=arr.join('');//将数组转为字符 return str;//输出解密后的字符串 } rot13("SERR PBQR PNZC");
输出为:FREE CODE CAMP
事实证明,真正学代码还是靠实战,不管你之前看了多少教学视频,买了多少辅导书,都不如自己动手来的快。感觉这两天编程思维能力突飞猛进啊。加油吧。
- 再回首,数据结构——字符串与数组的常见操作(链式存储,包含朴素匹配算法等)
- js数组常见操作及数组与字符串相互转化实例详解
- js笔记(四)算法涉及的操作 数组,字符串
- js 常见数组和字符串的操作
- js数组的常见操作( push、pop、unshift、shift、splice、concat、 join)的用法
- js 数组和字符串字符串转换操作
- js回顾之常见数组操作
- JS解析json数据(如何将json字符串转化为数组)
- 再回首,数据结构——字符串与数组的常见操作(顺序存储)
- JS解析json数据(如何将json字符串转化为数组)
- JS解析json数据(如何将json字符串转化为数组)
- JS常用数组和字符串相关操作:数组增加、删除、截取、剪切、合并、翻转,取下标以及字符串截取、分割等
- 02 ”hogwarts“击败js吧—.—数组和字符串常见方法
- JS字符串,数组操作(持续更新)
- 【学习笔记四】- 用js实现的一些数组操作和算法
- js操作字符串,数组,json对象
- php使用js保存的json cookie 字符串,然后解析成数组,需要注意的事项
- 关于JS截取字符串以及截取数组项的几种常见方法解析
- JS解析json数据(如何将json字符串转化为数组)
- js中基本类型操作-----数组基本操作、字符串操作、json操作