javascript基礎(chǔ)練習(xí)之翻轉(zhuǎn)字符串與回文
翻轉(zhuǎn)字符串
翻轉(zhuǎn)字符串(Reverse a String),就是把字符串倒序處理的意思,比如給定一個(gè)字符串”hello”,翻轉(zhuǎn)后應(yīng)該返回”olleh”。
測(cè)試用例
reverseString("hello")應(yīng)該返回 “olleh”reverseString("Greetings from Earth")應(yīng)該返回 “htraE morf sgniteerG”
實(shí)現(xiàn)思路
這里說(shuō)最方便的方法就是將字符串轉(zhuǎn)成數(shù)組,再顛倒數(shù)組并轉(zhuǎn)成字符串返回。需要用到字符串對(duì)象和數(shù)組對(duì)象的內(nèi)置方法:
String.split()Array.reverse()Array.join()
具體可以去看JavaScript參考手冊(cè)
function reverseString(str) {
return str.split('').reverse().join('');
}
reverseString("hello");
一句return搞定,很簡(jiǎn)單有木有?!
在此基礎(chǔ)上來(lái)看看回文是怎么玩的⬇️
回文
“Madam,I'mAdam.” 這是亞當(dāng)在伊甸園里碰上夏娃說(shuō)的第一句話,這句話正著讀和反著讀一模一樣,這樣的句子就是回文,英文里叫Palindrome。
舉個(gè)栗子——“上海自來(lái)水來(lái)自海上”,這句話順著讀和反著讀都是相同的,還有很多英語(yǔ)單詞也是:Level、Madam、Radar、LOL(哈哈哈)…
測(cè)試用例
palindrome("Race Car")應(yīng)該返回 truepalindrome("not a palindrome")應(yīng)該返回 falsepalindrome("0_0 (: /-\ :) 0-0")應(yīng)該返回 true
實(shí)現(xiàn)思路
我們需要寫(xiě)一個(gè)叫palindrome()的方法,傳入一個(gè)叫str的參數(shù),如果str是一個(gè)Palindromes將返回true,反之為false。
需要注意將標(biāo)點(diǎn)符號(hào)和空格去掉并toUpperCase or toLowerCase后再進(jìn)行判斷。
需要用到以下知識(shí)點(diǎn):
- 正則表達(dá)式 (regular expression) ,用來(lái)過(guò)濾符號(hào)和空格
String.replace()替換與正則表達(dá)式匹配的子串String.toLowerCase()把字符串轉(zhuǎn)換為小寫(xiě)
關(guān)于正則表達(dá)式
這里要求匹配大小寫(xiě)英文字母和整數(shù),任何標(biāo)點(diǎn)符合和空格將被過(guò)濾掉。所以可以使用 /[^A-Za-z0–9]/g 或者 /[\W_]/g
- [^A-Z] 匹配非26個(gè)大寫(xiě)字母中的任意一個(gè)
- [^a-z] 匹配非26個(gè)小寫(xiě)字母中的任意一個(gè)
- [^0-9] 匹配非0到9中的任意一個(gè)數(shù)字
- [^_] 匹配非下劃線
- ^ 匹配字符串的開(kāi)始
- \w 注意是小寫(xiě),匹配字母或數(shù)字或下劃線或漢字
- \W 注意是大寫(xiě),匹配任意不是字母、數(shù)字、下劃線、漢字的字符,等價(jià)于[^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)來(lái)實(shí)現(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;
}
這個(gè)思路很巧妙的運(yùn)用了回文的特點(diǎn),把整個(gè)字符串切成一半,循環(huán)遍歷并依次判斷首尾字符是否相等。
還有個(gè)運(yùn)用了遞歸的實(shí)現(xiàn):
function palindrome (str) {
// 刪除字符串中不必要的字符
var re = /[\W_]/g;
// 將字符串變成小寫(xiě)字符
var lowRegStr = str.toLowerCase().replace(re, '');
// 如果字符串lowRegStr的length長(zhǎng)度為0時(shí),字符串即是palindrome
if (lowRegStr.length === 0) {
return true;
}
// 如果字符串的第一個(gè)和最后一個(gè)字符不相同,那么字符串就不是palindrome
if (lowRegStr[0] !== lowRegStr[lowRegStr.length - 1]) {
return false;
} else {
return palindrome(lowRegStr.slice(1, lowRegStr.length - 1));
}
}
感覺(jué)另外兩個(gè)實(shí)現(xiàn)思路比我屌多了,自己在編程的路上才走沒(méi)多遠(yuǎn),一步一步來(lái)吧。
對(duì)了,別糾結(jié)翻轉(zhuǎn)字符串和回文的區(qū)別了!翻轉(zhuǎn)字符串僅僅是將倒序后的字符串返回;而回文面對(duì)的則是更長(zhǎng)更復(fù)雜的句子,需要將過(guò)濾掉空格和標(biāo)點(diǎn)符號(hào)的句子和倒序后的句子比較是否相等。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用Javascript能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。謝謝大家對(duì)腳本之家的支持。
- JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之棧與隊(duì)列
- JavaScript中數(shù)據(jù)結(jié)構(gòu)與算法(一):棧
- JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之棧詳解
- js如何找出字符串中的最長(zhǎng)回文串
- javascript判斷回文數(shù)詳解及實(shí)現(xiàn)代碼
- js-FCC算法-No repeats please字符串的全排列(詳解)
- js實(shí)現(xiàn)字符全排列算法的簡(jiǎn)單方法
- 淺談js中字符和數(shù)組一些基本算法題
- JS使用棧判斷給定字符串是否是回文算法示例
相關(guān)文章
Eclipse去除js(JavaScript)驗(yàn)證錯(cuò)誤
這篇文章主要是對(duì)Eclipse去除js(JavaScript)驗(yàn)證錯(cuò)誤進(jìn)行了介紹。在Eclipse中,js文件常常會(huì)報(bào)錯(cuò)??梢酝ㄟ^(guò)如下幾個(gè)步驟解決2014-02-02
使用layui 渲染table數(shù)據(jù)表格的實(shí)例代碼
今天小編就為大家分享一篇使用layui 渲染table數(shù)據(jù)表格的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
javascript實(shí)現(xiàn)搶購(gòu)倒計(jì)時(shí)程序
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)搶購(gòu)倒計(jì)時(shí)程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
關(guān)于JavaScript的gzip靜態(tài)壓縮方法
關(guān)于JavaScript的gzip靜態(tài)壓縮方法...2007-01-01
bootstrap-table.js擴(kuò)展分頁(yè)工具欄(增加跳轉(zhuǎn)到xx頁(yè))功能
這篇文章主要介紹了bootstrap-table.js擴(kuò)展分頁(yè)工具欄,增加跳轉(zhuǎn)到xx頁(yè)功能,由于小編的水平停留在dom級(jí),此次擴(kuò)展只支持頁(yè)面上的表格,如果大家有好的建議歡迎提出2017-12-12
JavaScript中常見(jiàn)的類型判斷方法和區(qū)別詳解
在JavaScript中,我們經(jīng)常需要對(duì)數(shù)據(jù)的類型進(jìn)行判斷,以便進(jìn)行相應(yīng)的處理,本文將介紹JavaScript中常見(jiàn)的類型判斷方法,包括typeof、instanceof、Object.prototype.toString() 以及Array.isArray(),并且會(huì)詳細(xì)解釋它們之間的區(qū)別,需要的朋友可以參考下2023-11-11
用JavaScript檢查大寫(xiě)鍵(Caps Lock)是否打開(kāi)的腳本
用JavaScript檢查大寫(xiě)鍵(Caps Lock)是否打開(kāi)的腳本...2007-06-06

