摘要:比如,就是獲取第一個字符。后面的暫時不會執行直到遇見傳入的字符串為,因為有了返回值,就不會再去調用了。
翻轉字符串 (Reverse a String) 題目鏈接原文鏈接:http://singsing.io/blog/2017/...
中文鏈接
英文鏈接
級別:初級 (Basic Algorithm Scripting)
問題解釋這個 function 接收一個字符串參數,返回翻轉后的字符串
比如接收的是 "hello",那么輸出就是 "olleh"
參考鏈接String.split()
Array.reverse()
Array.join()
思路提示先把字符串分割成為數組
翻轉數組
把翻轉后的數組合并為字符串
參考答案 基本答案function reverseString(str) { var strArr = str.split(""); var reversedArr = strArr.reverse(); return reversedArr.join(""); }解釋
第一步就是把傳入的 str 分割,并賦值給 strArr
第二步是把數組翻轉,并賦值給 reversedArr
第三步是返回合并之后的字符
需要注意的是,以上的 .split 和 .join 都不會改變原來的字符串或數組,但 reverse 會改變原來的數組
優化function reverseString(str) { return str.split("").reverse().join(""); }解釋
.split 返回分割后的數組,因此可以直接調用 .reverse
.reverse() 方法返回的是翻轉后的數組,因此可以直接調用 .join
.join 之后就是我們想要的字符串,直接返回即可
這里用到了 Method Chaining,也就是方法的鏈式調用。只要你熟悉方法的返回值,就可以這么做,好處在于可以不用創建這么多變量
中級解法直接利用字符串方法,而不需要轉換成數組
function reverseString(str) { var result = ""; for (var i = str.length - 1; i >= 0; i--) { result += str[i]; } return newString; }解釋
首先我們先創建一個變量,叫 result,用于保存輸出結果
然后,從右邊開始遍歷字符串。值得注意的是,就像數組一樣,字符串一樣可以通過所以來獲取某一個字符。比如,str[0] 就是獲取第一個字符。再比如,str[-1] 就是獲取最后一個字符
因為是從右邊開始遍歷,那我們把每次遍歷到的字符直接加到 result 就可以了
需要注意的是邊界條件的確定,因為字符串的索引同樣是從 0 開始的,因此遍歷的初始值要設置為 str.length - 1,結束值為 0
高級解法通過字符串方法以及遞歸來翻轉
function reverseString(str) { // 設置遞歸終點(彈出條件) if (!str) { return ""; } else { // 遞歸調用 return reverseString(str.substr(1)) + str.charAt(0); } }解釋
這種方法,一開始不能理解沒關系。等做到高級算法題,再回來看看應該就可以理解了
遞歸涉及到兩個因素,遞歸調用以及彈出過程。reverseString(str.substr(1)) 就是遞歸調用,+ str.charAt(0) 就是彈出過程
代碼在執行到 reverseString(str.substr(1)) 的時候,會重新調用 reverseString,并傳入 str.substr(1) 作為參數。后面的 + str.charAt(0) 暫時不會執行
直到遇見傳入的字符串為 "",因為有了 "" 返回值,就不會再去調用 reverseString 了。這時候,才會一步一步地執行 + str.charAt(0),也就是彈出過程
舉個例子:
var str = "abc"; reverseString(str)
執行過程如下:
首先執行 reverseString("abc"),這時候傳入的 str 不為空,所以執行 else 部分。讀到了 reverseString(str.substr(1)),這時候就是遞歸調用,執行這段代碼,其中 str.substr(1) 為 "bc"
reverseString("bc"),這時候傳入的 str 不為空,所以執行 reverseString(str.substr(1)),其中 str.substr(1) 為 "c"
reverseString("c"),這時候傳入的 str 依舊不為空,所以執行 reverseString(str.substr(1)),其中 str.substr(1) 為 ""
reverseString(""),終于,傳入的 str 為空,這時候返回 ""
回到 reverseString("c") 這一步,剛才的返回值是 "",此時的 str.charAt(0) 為 "c",那么這一步的返回值是 "c"
回到 reverseString("bc"),剛才的返回值是 "c",此時的 str.charAt(0) 為 "b",那么這一步的返回值是 "cb"
回到 reverseString("abc"),剛才的返回值是 "cb",此時的 str.charAt(0) 為 "a",那么這一步的返回值是 "cba"
至此,我們得到了最終結果,"cba"
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88173.html
摘要:語法你指定的進行拆分的分隔符。可以是一個字符串或正則表達式,如果分隔符為空字符串,則將原字符串中每個字符的數組形式返回。如果元素是或者,則會轉化成空字符串。語法默認為分隔符空字符串分隔符剛好是方法的反運算。 從這篇開始與非將逐篇介紹在初級算法闖關中遇到的問題和記錄,有疏漏和錯誤的地方希望大家可以幫忙指正。這里推薦一個MDN web docs網站,博客里的方法釋義均來自此,點擊相應位置可...
摘要:總結下基礎算法題先把字符串轉化成數組,再借助數組的方法翻轉數組順序,最后把數組轉化成字符串。檢查一個字符串是否以指定的字符串結尾。刪除數組中的所有假值。加密算法的核心是前個字母值加,后個字母值減從字母表重新回滾。 總結下FreeCodeCamp基礎算法題: Reverse a String 先把字符串轉化成數組,再借助數組的reverse方法翻轉數組順序,最后把數組轉化成字符串。 fu...
摘要:方法二提供者沐辰樓姬采用對象的方法取值優化內部循環性能確認末尾字符算法挑戰檢查一個字符串是否以指定的字符串結尾。方法一方法二提供者沐辰樓姬使用數組對象方法,把數組的第一個元素從其中刪除,并返回第一個元素的值。 showImg(https://segmentfault.com/img/remote/1460000009702368?w=1269&h=541); 前言 偶然看到W3Csch...
摘要:方法二提供者沐辰樓姬采用對象的方法取值優化內部循環性能確認末尾字符算法挑戰檢查一個字符串是否以指定的字符串結尾。方法一方法二提供者沐辰樓姬使用數組對象方法,把數組的第一個元素從其中刪除,并返回第一個元素的值。 showImg(https://segmentfault.com/img/remote/1460000009702368?w=1269&h=541); 前言 偶然看到W3Csch...
摘要:設置首字母大寫算法挑戰返回一個字符串確保字符串的每個單詞首字母都大寫,其余部分小寫。確認末尾字符算法檢查一個字符串是否以指定的字符串結尾。刪除數組中特定值算法挑戰刪除數組中的所有的假值。 在w3cschool上看到了這些初級算法題目,自己先嘗試做了一下,不會的也會查看一下別人的借鑒一下思路,更多的幫助自己熟悉字符串和數組方法的應用.如果您有更好的解法,可以指出來還有中級算法題目和后面的...
閱讀 2672·2021-11-18 10:02
閱讀 3402·2021-09-28 09:35
閱讀 2586·2021-09-22 15:12
閱讀 741·2021-09-22 15:08
閱讀 3071·2021-09-07 09:58
閱讀 3464·2021-08-23 09:42
閱讀 725·2019-08-30 12:53
閱讀 2072·2019-08-29 13:51