javascript基礎練習之翻轉(zhuǎn)字符串與回文
翻轉(zhuǎn)字符串
翻轉(zhuǎn)字符串(Reverse a String),就是把字符串倒序處理的意思,比如給定一個字符串”hello”,翻轉(zhuǎn)后應該返回”olleh”。
測試用例
reverseString("hello")
應該返回 “olleh”reverseString("Greetings from Earth")
應該返回 “htraE morf sgniteerG”
實現(xiàn)思路
這里說最方便的方法就是將字符串轉(zhuǎn)成數(shù)組,再顛倒數(shù)組并轉(zhuǎn)成字符串返回。需要用到字符串對象和數(shù)組對象的內(nèi)置方法:
String.split()
Array.reverse()
Array.join()
具體可以去看JavaScript參考手冊
function reverseString(str) { return str.split('').reverse().join(''); } reverseString("hello");
一句return搞定,很簡單有木有?!
在此基礎上來看看回文是怎么玩的⬇️
回文
“Madam,I'mAdam.” 這是亞當在伊甸園里碰上夏娃說的第一句話,這句話正著讀和反著讀一模一樣,這樣的句子就是回文,英文里叫Palindrome。
舉個栗子——“上海自來水來自海上”,這句話順著讀和反著讀都是相同的,還有很多英語單詞也是:Level、Madam、Radar、LOL(哈哈哈)…
測試用例
palindrome("Race Car")
應該返回 truepalindrome("not a palindrome")
應該返回 falsepalindrome("0_0 (: /-\ :) 0-0")
應該返回 true
實現(xiàn)思路
我們需要寫一個叫palindrome()
的方法,傳入一個叫str的參數(shù),如果str是一個Palindromes將返回true,反之為false。
需要注意將標點符號和空格去掉并toUpperCase or toLowerCase后再進行判斷。
需要用到以下知識點:
- 正則表達式 (regular expression) ,用來過濾符號和空格
String.replace()
替換與正則表達式匹配的子串String.toLowerCase()
把字符串轉(zhuǎn)換為小寫
關(guān)于正則表達式
這里要求匹配大小寫英文字母和整數(shù),任何標點符合和空格將被過濾掉。所以可以使用 /[^A-Za-z0–9]/g 或者 /[\W_]/g
- [^A-Z] 匹配非26個大寫字母中的任意一個
- [^a-z] 匹配非26個小寫字母中的任意一個
- [^0-9] 匹配非0到9中的任意一個數(shù)字
- [^_] 匹配非下劃線
- ^ 匹配字符串的開始
- \w 注意是小寫,匹配字母或數(shù)字或下劃線或漢字
- \W 注意是大寫,匹配任意不是字母、數(shù)字、下劃線、漢字的字符,等價于[^A-Za-z0-9_]
- g 表示全局搜索
這是我的方法:
function palindrome(str) { str = str.replace(/[\W_]/g,'').toLowerCase(); var reverseStr = str.split('').reverse().join(''); return str===reverseStr; } palindrome("eye");
我在網(wǎng)上看到還可以用For循環(huán)來實現(xiàn):
function palindrome (str) { var reg = /[\W_]/g, regStr = str.toLowerCase().replace(reg, ''), len = regStr.length; for (var i = 0, halfLen = len / 2; i < halfLen; i++){ if (regStr[i] !== regStr[len - 1 - i]) { return false; } } return true; }
這個思路很巧妙的運用了回文的特點,把整個字符串切成一半,循環(huán)遍歷并依次判斷首尾字符是否相等。
還有個運用了遞歸的實現(xiàn):
function palindrome (str) { // 刪除字符串中不必要的字符 var re = /[\W_]/g; // 將字符串變成小寫字符 var lowRegStr = str.toLowerCase().replace(re, ''); // 如果字符串lowRegStr的length長度為0時,字符串即是palindrome if (lowRegStr.length === 0) { return true; } // 如果字符串的第一個和最后一個字符不相同,那么字符串就不是palindrome if (lowRegStr[0] !== lowRegStr[lowRegStr.length - 1]) { return false; } else { return palindrome(lowRegStr.slice(1, lowRegStr.length - 1)); } }
感覺另外兩個實現(xiàn)思路比我屌多了,自己在編程的路上才走沒多遠,一步一步來吧。
對了,別糾結(jié)翻轉(zhuǎn)字符串和回文的區(qū)別了!翻轉(zhuǎn)字符串僅僅是將倒序后的字符串返回;而回文面對的則是更長更復雜的句子,需要將過濾掉空格和標點符號的句子和倒序后的句子比較是否相等。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家學習或者使用Javascript能帶來一定的幫助,如果有疑問大家可以留言交流。謝謝大家對腳本之家的支持。
相關(guān)文章
Layer.js實現(xiàn)表格溢出內(nèi)容省略號顯示,懸停顯示全部的方法
今天小編就為大家分享一篇Layer.js實現(xiàn)表格溢出內(nèi)容省略號顯示,懸停顯示全部的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09JavaScript實現(xiàn)環(huán)繞鼠標旋轉(zhuǎn)效果
這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)環(huán)繞鼠標旋轉(zhuǎn)效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01