JS基础算法题(一)
记录在FreeCodeCamp中遇到的Javascript基础算法题
1.翻转字符串
先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串
- function reverseString(str) {
- var arr = str.split("");
- var reverseArr = arr.reverse();
- str = reverseArr.join('');
- return str;
- }
- reverseString("hello"); //olleh
用到的方法:String.split();Array.join();Array.reverse()
2.计算整数的阶乘
如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。
- function factorialize(num) {
- var result =1;
- for(var i=1;i<=num;i++){
- result*=i;
- }
- return result;
- }
- factorialize(5);//5*4*3*2*1=120
3.回文字符串
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
- function palindrome(str) {
- str = str.replace(/[^\w]/gi, "").replace(/_/g, "");
- str = str.toLowerCase();
- var reverseStr = str.split("").reverse().join('');
- if (str == reverseStr) {
- return true;
- } else {
- return false;
- }
- }
- palindrome("eye");
涉及知识点:String.replace();String.toLowerCase();正则表达式
4.找出最长的单词
在句子中找出最长的单词,并返回它的长度。
- function findLongestWord(str) {
- str = str.split(" ");
- //这里我用了一个比较麻烦的方法,冒泡排序;简便方法可以看第6题
- for (var i = 0; i < str.length; i++) {
- for (var j = 0; j < str.length - 1 - i; j++) {
- if (str[j + 1].length > str[j].length) {
- var temp = str[j];
- str[j] = str[j + 1];
- str[j + 1] = temp;
- }
- }
- }
- return str[0].length;
- }
- findLongestWord("The quick brown fox jumped over the lazy dog");
涉及知识:String.split();String.length;排序算法
5.字符串首字母大写
句中单词首字母大写。确保字符串的每个单词首字母都大写,其余部分小写。像'the'和'of'这样的连接符同理。
- function titleCase(str) {
- var strArr = str.toLowerCase().split(" ");
- for(var i=0;i<strArr.length;i++){
- var first = strArr[i].charAt(0);//返回指定位置的字符,标点符号也包括在内
- strArr[i] = strArr[i].replace(first,function(first){
- return first.toUpperCase();
- });
- }
- str = strArr.join(" ");
- return str;
- }
- titleCase("I'm a little tea pot");
涉及知识:String.charAt();String.split();String.toUpperCase()
6.找出多个数组中的最大数
- function largestOfFour(arr) {
- var largestArr = [];
- for(var i=0;i<arr.length;i++){
- var largest = 0;
- for(var j=0;j<arr[i].length;j++){
- largest = arr[i][j]>largest?arr[i][j]:largest;
- }
- largestArr.push(largest);
- }
- return largestArr;
- }
- largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); //[5,27,39,1001]
涉及知识:三元运算符;比较操作符
7.检查字符串结尾
判断一个字符串(str)是否以指定的字符串(target)结尾。
- function confirmEnding(str, target) {
- //substr()在字符串中抽取从 start 下标开始的指定数目的字符
- if(target == str.substr(str.length - target.length, target.length)){
- return true;
- }else{
- return false;
- }
- }
- confirmEnding("Bastian", "n");//true
- confirmEnding("He has to give me a new name", "me");//true
涉及知识:String.substr();
8.重复输出字符串
重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串。
- function repeat(str, num) {
- var res = "";
- for(var i=0; i<num; i++){
- res += str;
- }
- return res;
- }
- repeat("abc", 3);
9.截断字符
如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。
切记,插入到字符串尾部的三个点号也会计入字符串的长度。
但是,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。
- function truncate(str, num) {
- var extra="";
- if(str.length>num){
- if(num>3){
- extra = str.slice(0,num-3)+"...";
- }else{
- extra = str.slice(0,num)+"...";
- }
- return extra;
- }
- return str;
- }
- truncate("A-tisket a-tasket A green and yellow basket", 11);//A-tisket...
涉及知识:String.slice()
10.截断数组
返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始
- function slasher(arr, howMany) {
- arr.splice(0,howMany);
- return arr;
- }
- slasher([1, 2, 3], 2);
涉及知识:Array.splice()