摘要:方法二提供者沐辰樓姬采用對象的方法取值優化內部循環性能確認末尾字符算法挑戰檢查一個字符串是否以指定的字符串結尾。方法一方法二提供者沐辰樓姬使用數組對象方法,把數組的第一個元素從其中刪除,并返回第一個元素的值。
前言
偶然看到W3Cschool上有個編程挑戰,里面的題目前是面向前端方面的,也有一些算法和數據結構的題在,我花了兩天的時間把16道初級腳本算法的題完成并做一個思路分享,從中有一定的收獲,題目從實際出發,需要靈活運用各個JS對象的屬性和方法才能完成,反復的加深了我對這些方法的認識和理解以及運用,也鍛煉了我的邏輯思維能力。做這些題確實很有幫助,以后有時間每天再去做一兩道中級的,最后再整理出來把我的解法和思路與大家共享。
翻轉字符串先把字符串轉化成數組,再借助數組的reverse方法翻轉數組順序,最后把數組轉化成字符串。
你的結果必須得是一個字符串
function reverseString(str) { var arr = []; arr = str.split(""); arr.reverse(); str = arr.join(""); return str; } console.log(reverseString("hello"));
知識點:
split() 把字符串分割為字符串數組。
reverse() 反轉數組的元素順序。
join() 把數組轉換為字符串,并返回結果。
階乘算法挑戰計算一個整數的階乘
如果用字母n來代表一個整數,階乘代表著所有小于或等于n的整數的乘積。
// //for循環 // function factorialize(num) { // var i = 1 // var sum = 1; // for (; i < num + 1; i++) { // sum = sum * i; // } // return sum; // } // 遞歸實現 function factorialize(num) { if (num == 1 || num == 0) return 1; else { return factorialize(num - 1) * num; } } console.log(factorialize(0));回文算法挑戰
如果一個字符串忽略標點符號、大小寫和空格,正著讀和反著讀一模一樣,那么這個字符串就是palindrome(回文)。
你需要去掉字符串多余的標點符號和空格
然后把字符串轉化成小寫來驗證此字符串是否為回文。
function palindrome(str) { //傳入字符串處理 var newstr = str.replace(/[^0-9a-z]/gi, ""); newstr = newstr.toLowerCase(); // // 方法一 // //轉換成數組并進行反向排序 // var arr = newstr.split(""); // arr.reverse(); // //把排序后的轉換為字符串進行全等判斷 // arr = arr.join(""); // if (newstr === arr) { // return true; // } else { // return false; // } //方法二 從字符串頭部和尾部,逐次向中間檢測 for (var i = 0, j = newstr.length - 1; i < j; i++, j--) { //這里注意下,for循環內部只判斷不符合要求的, //如果循環后都沒返回false就在for外部返回true,不要在內部直接返回true或提前出來 if (newstr.charAt(i) !== newstr.charAt(j)) { return false; } } return true; } console.log(palindrome("assa"));尋找最長的單詞算法挑戰
找到提供的句子中最長的單詞,并計算它的長度。
函數的返回值應該是一個數字。
function findLongestWord(str) { var arr = str.split(" "), i = 0, maxLengthNum = 0; // var index = i + 1; //方法一:復雜化方法:冒泡排序解法(直接第一個想到就是這個,就順著來做了,發現復雜化, //只需要把數組長度和最大值取出來做比較就行了) // for (; i < arr.length - 1; i++) { // for (; index < arr.length; index++) { // if (arr[i].length < arr[index].length) { // var temp = arr[i]; // arr[i] = arr[index]; // arr[index] = temp; // } // } // } // return arr[0].length; //方法二:取出數組長度值與歷史最大值比較,第一個默認為起始最大值 for (; i < arr.length; i++) { if (arr[i].length > maxLengthNum) { maxLengthNum = arr[i].length; } } return maxLengthNum; } findLongestWord("The quick brown fox jumped over the lazy dog");設置首字母大寫算法挑戰
確保字符串的每個單詞首字母都大寫,其余部分小寫。
//方法一:復雜化,沒有使用charAt+replace、map() + slice() // function titleCase(str) { // var arr = str.toLowerCase().split(" "); // var newArr = new Array(); // var i = 0; // for (; i < arr.length; i++) { // newArr[i] = arr[i].split(""); // newArr[i][0] = newArr[i][0].toUpperCase(); // newArr[i] = newArr[i].join(""); // } // arr = newArr.join(" "); // console.log(arr); // return arr; // } //方法二:簡單化用replace替換首字母大寫 // function titleCase(str) { // var arr = str.toLowerCase().split(" "); // var i = 0; // for (; i < arr.length; i++) { // var Up = arr[i].charAt(0).toUpperCase(); // arr[i] = arr[i].replace(arr[i].charAt(0), Up); // } // return arr.join(" "); // } //方法三:map() + replace() function titleCase(str) { var arr = str.toLowerCase().split(" ").map(function(word) { return (word.charAt(0).toUpperCase() + word.slice(1)); }).join(" "); console.log(arr); return arr; } titleCase("I"m a little tea pot");尋找數組中的最大值算法挑戰
右邊大數組中包含了4個小數組,分別找到每個小數組中的最大值,然后把它們串聯起來,形成一個新數組。
方法一:
function largestOfFour(arr) { var i = 0, j = 0, maxArr = []; for (; i < arr.length; i++) { var max = 0; //內部循環后,比較值要清空一次。 for (; j < arr[i].length; j++) { if (arr[i][j] > max) { max = arr[i][j]; } } maxArr.push(max); } return maxArr; } largestOfFour([ [13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1] ]);
方法二(提供者:沐辰樓-姬):
function largestOfFour(arr) { var i = 0; var maxArr =[]; for (; i < arr.length; i++) { for (var j = 0; j < arr[i].length; j++) { if (j===0) { maxArr[i] = arr[i][j]; }else{ //采用Math對象的max方法取值優化內部循環性能 maxArr[i]=Math.max(maxArr[i],arr[i][j]); } } } return maxArr; }確認末尾字符算法挑戰
檢查一個字符串(str)是否以指定的字符串(target)結尾。
//方法一:使用lastIndexOf從最后開始查找,并返回對應的起始位置到其索引,再做比較,indexOf也可實現返回索引 // function confirmEnding(str, target) { // var index = str.lastIndexOf(target); // return index == str.length - target.length; // } //方法二:使用substr抽取出字符,用負數來實現從末尾抽對應的查詢字符的長度 //如果查找的字符實在最后出現,則抽取出來的應該和需要查找的一樣,同理slice也可以實現提取 function confirmEnding(str, target) { var endingPart = str.substr(-(target.length)); return target === endingPart; } console.log(confirmEnding("Walking on water and developing software from a are easy if both are frozen specification", "specification"));重復操作算法挑戰
重復一個指定的字符串 num次,如果num是一個負數則返回一個空字符串。
function repeat(str, num) { var temp = str, i = 0; if (num < 0) { return ""; } else { for (; i < num - 1; i++) { str = str.concat(temp); } } return str; } console.log(repeat("abc", 3));字符串截取算法挑戰
如果字符串的長度比指定的參數num長,則把多余的部分用...來表示。切記,插入到字符串尾部的三個點號也會計入字符串的長度。但是,如果指定的參數num小于或等于3,則添加的三個點號不會計入字符串的長度。
function truncate(str, num) { var more = "..."; // Clear out that junk in your trunk if (str.length <= num) { if (num <= 3) { var newStr = str.substr(0, num); str = newStr.concat(more); } else return str; } else { if (num <= 3) { var newStr = str.substr(0, num); str = newStr.concat(more); } else { var newStr = str.substr(0, num - 3); str = newStr.concat(more); } } return str; } console.log(truncate("Absolutely Longer", 2));數組分割算法挑戰
猴子吃香蕉可是掰成好幾段來吃哦!
把一個數組arr按照指定的數組大小size分割成若干個數組塊。
例如:chunk([1,2,3,4],2)=[[1,2],[3,4]];
chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]];
function chunk(arr, size) { // Break it up. var newArr = []; var index = 0, end = size, i = 0; var count = arr.length / size; console.log(count); for (; i < count; index += size) { newArr[i] = arr.slice(index, end); end = end + end; i++; } return newArr; } console.log(chunk([0, 1, 2, 3, 4, 5, 6], 3));數組截斷算法挑戰
返回一個數組被截斷n個元素后還剩余的元素,截斷從索引0開始。
方法一:
function slasher(arr, howMany) { if (arr.length > howMany) { arr = arr.slice(-(arr.length - howMany)); return arr; } else return []; } console.log(slasher([1, 2, 3], 4));
方法二:(提供者沐辰樓-姬)
function slasher(arr, howMany) { for (var i = 0; i < howMany; i++) { //使用數組對象shift()方法,把數組的第一個元素從其中刪除,并返回第一個元素的值。 arr.shift(); } return arr; }數組查詢算法挑戰
蛤蟆可以吃隊友,也可以吃對手。
如果數組第一個字符串元素包含了第二個字符串元素的所有字符,函數返回true。
舉例,["hello", "Hello"]應該返回true,因為在忽略大小寫的情況下,第二個字符串的所有字符都可以在第一個字符串找到。["hello", "hey"]應該返回false,因為字符串"hello"并不包含字符"y"。["Alien", "line"]應該返回true,因為"line"中所有字符都可以在"Alien"找到。
function mutation(arr) { var count = 0, newArr, i = 0; newArr = arr.join(" "); newArr = newArr.toLowerCase().split(" "); newArr[0] = newArr[0].split(""); newArr[1] = newArr[1].split(""); console.log(newArr); for (; i < newArr[1].length; i++) { var index = 0; for (; index < newArr[0].length; index++) { if (newArr[1][i] == newArr[0][index]) { count++; index = newArr[0].length; } } console.log(count); } return count === arr[1].length; } console.log(mutation(["floor", "for"]));刪除數組中特定值算法挑戰
刪除數組中的所有假值。
在JavaScript中,假值有false、null、0、""、undefined 和 NaN。
function bouncer(arr) { var index = 0; // Don"t show a false ID to this bouncer. for (; index < arr.length; index++) { if (!arr[index]) { arr.splice(index, 1); //保證刪除數組元素后,索引不跳過下一個 index--; } } return arr; } console.log(bouncer([7, "ate", "", false, 9]));去除數組中任意多個值算法挑戰
實現一個摧毀(destroyer)函數,第一個參數是待摧毀的數組,其余的參數是待摧毀的值。
function destroyer(arr, del1, del2, del3) { var newDel = [del1, del2, del3], index = 0; for (; index < newDel.length; index++) { var i = 0; for (; i < arr.length; i++) { if (arr[i] == newDel[index]) { arr.splice(i, 1); i--; } } } return arr; } console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));數組排序并插入值算法挑戰
先給數組排序,然后找到指定的值在數組的位置,最后返回位置對應的索引。
舉例:where([1,2,3,4], 1.5) 應該返回 1。因為1.5插入到數組[1,2,3,4]后變成[1,1.5,2,3,4],而1.5對應的索引值就是1。
同理,where([20,3,5], 19) 應該返回 2。因為數組會先排序為 [3,5,20],19插入到數組[3,5,20]后變成[3,5,19,20],而19對應的索引值就是2。
function where(arr, num) { arr.push(num); var i = 0, index = 0; for (; i < arr.length - 1; i++) { var j = i + 1; for (; j < arr.length; j++) { if (arr[i] > arr[j]) { var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } for (; index < arr.length; index++) { if (arr[index] == num) { return index; } } } console.log(where([2, 20, 10], 19));位移密碼算法挑戰
下面我們來介紹風靡全球的凱撒密碼Caesar cipher,又叫移位密碼。
移位密碼也就是密碼中的字母會按照指定的數量來做移位。
一個常見的案例就是ROT13密碼,字母會移位13個位置。由"A" ? "N", "B" ?"O",以此類推。
寫一個ROT13函數,實現輸入加密字符串,輸出解密字符串。
所有的字母都是大寫,不要轉化任何非字母形式的字符(例如:空格,標點符號),遇到這些特殊字符,跳過它們。
方法一:
function rot13(str) { // LBH QVQ VG! var arr = []; for (var index = 0; index < str.length; index++) { arr[index] = str.charCodeAt(index); if (arr[index] >= 65 && arr[index] <= 77) { arr[index] += 13; } //字母為26個當在字母末13個位,右移13位不是字母,應該進行左移、保證在字母26位里。 else if (arr[index] > 77 && arr[index] < 91) arr[index] -= 13; } for (var i = 0; i < arr.length; i++) { arr[i] = String.fromCharCode(arr[i]); } return arr.join(""); } // Change the inputs below to test console.log(rot13("SERR PBQR PNZC"));
方法二(提供者:沐辰樓-姬)
function rot13(str) { var a = []; for (var i = 0; i < str.length; i++) { a[i] = str.charCodeAt(i); if (a[i] >= 65 && a[i] <= 90) { a[i] = a[i] + 13; //優化處 if (a[i] > 90) { a[i] = a[i] - 91 + 65; } } } for (var j = 0; j < a.length; j++) { a[j] = String.fromCharCode(a[j]); } return a.join(""); }End
大家如果有更好的方法或者其他解法歡迎補充和交流,可與我直接聯系。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86993.html
摘要:方法二提供者沐辰樓姬采用對象的方法取值優化內部循環性能確認末尾字符算法挑戰檢查一個字符串是否以指定的字符串結尾。方法一方法二提供者沐辰樓姬使用數組對象方法,把數組的第一個元素從其中刪除,并返回第一個元素的值。 showImg(https://segmentfault.com/img/remote/1460000009702368?w=1269&h=541); 前言 偶然看到W3Csch...
摘要:設置首字母大寫算法挑戰返回一個字符串確保字符串的每個單詞首字母都大寫,其余部分小寫。確認末尾字符算法檢查一個字符串是否以指定的字符串結尾。刪除數組中特定值算法挑戰刪除數組中的所有的假值。 在w3cschool上看到了這些初級算法題目,自己先嘗試做了一下,不會的也會查看一下別人的借鑒一下思路,更多的幫助自己熟悉字符串和數組方法的應用.如果您有更好的解法,可以指出來還有中級算法題目和后面的...
摘要:依據每一個堿基,為其找到配對的堿基,然后將結果作為第二個數組返回。堿基對是一對和,為給定的字母匹配缺失的堿基。輸入檢查算法挑戰檢查一個值是否是基本布爾類型,并返回或。基本布爾類型即和。二進制字符串是以空格分隔的。 showImg(https://segmentfault.com/img/remote/1460000010866723); 前言 W3Cschool上有個編程挑戰,里面的題...
摘要:比如,就是獲取第一個字符。后面的暫時不會執行直到遇見傳入的字符串為,因為有了返回值,就不會再去調用了。 原文鏈接:http://singsing.io/blog/2017/... 翻轉字符串 (Reverse a String) 題目鏈接 中文鏈接 英文鏈接 級別:初級 (Basic Algorithm Scripting) 問題解釋 這個 function 接收一個字符串參數,...
摘要:如果不存在公共前綴,返回空字符串。示例輸入輸出示例輸入輸出解釋輸入不存在公共前綴。 ?作者簡介:大家好,我是車神哥,府學路18號的車神? ?個人主頁:應無所住...
閱讀 2577·2021-10-25 09:45
閱讀 1239·2021-10-14 09:43
閱讀 2297·2021-09-22 15:23
閱讀 1519·2021-09-22 14:58
閱讀 1934·2019-08-30 15:54
閱讀 3539·2019-08-30 13:00
閱讀 1354·2019-08-29 18:44
閱讀 1571·2019-08-29 16:59