摘要:來自雨夜帶刀需求描述從一組數(shù)組中找出一組按不同順序排列的字符串的數(shù)組元素。最后用編碼和作為對(duì)象的來保存編碼和一致的字符串。方法方法是將字符串轉(zhuǎn)換成數(shù)組后再對(duì)數(shù)組進(jìn)行排序,和使用排序后會(huì)變成,將拍好序的字符串作為對(duì)象的來保存排序一致的字符串。
(準(zhǔn)備面試,多看點(diǎn)題。來自雨夜帶刀"s Blog )
需求描述:從一組數(shù)組中找出一組按不同順序排列的字符串的數(shù)組元素。假如有這樣一個(gè)數(shù)組:
[ "abcd", "hello", "bdca", "olleh", "cadb", "nba", "abn", "abc" ]
需要找出的結(jié)果是:
[ "abcd", "bdca", "cadb" ]
那么這里的關(guān)鍵點(diǎn)是判斷一組字符串是否是否只是字符的順序不同,只要解決整個(gè)關(guān)鍵點(diǎn)其他都好辦了。
方法1:var stringClassify = function( arr ){ var arrLength = arr.length, obj = {}, i = 0, num, item, name, firstItem, strLength; for( ; i < arrLength; i++ ){ item = arr[i]; strLength = item.length; num = 0; // 將單個(gè)的字符轉(zhuǎn)換成 Unicode 編碼 // 對(duì)編碼進(jìn)行取和計(jì)算 for( j = 0; j < strLength; j++ ){ num += item.charCodeAt( j ); } if( !firstItem ){ firstItem = item; obj[ num ].push( item ); } // 通過檢測(cè)待添加的字符串的第一個(gè)字符是否 // 在另一個(gè)字符串中出現(xiàn)以避免將下面的情況 // [ "ad", "da", "bc" ] else if( ~firstItem.indexOf(item.charAt(0)) ){ obj[ num ].push( item ); } } for( name in obj ){ console.log( obj[name] ); } };
方法1采用了遍歷字符串中的每一個(gè)字符,然后將單個(gè)的字符轉(zhuǎn)換成 Unicode 編碼,對(duì)編碼進(jìn)行取和的計(jì)算,abcd 和 bdca 的編碼和會(huì)是一致的。最后用編碼和作為對(duì)象的 key 來保存編碼和一致的字符串。
方法 1 需要注意的是,字符串“ad”和“bc”的 Unicode 編碼和是一樣的,此時(shí)需要多加一個(gè)判斷,檢測(cè)任意一個(gè)字符串中的第一個(gè)字符是否有出現(xiàn)在另一個(gè)字符串中出現(xiàn)過即可。
方法2:var stringClassify = function(){ var arrLength = arr.length, obj = {}, i = 0, num, item, name, strArr, newStr; for( ; i < arrLength; i++ ){ item = arr[i]; strArr = arr[i].split( "" ); strArr.sort(); newStr = strArr.join( "" ); if( !obj[newStr] ){ obj[ newStr ] = []; } obj[ newStr ].push( item ); } for( name in obj ){ console.log( obj[name] ); } };
方法2是將字符串轉(zhuǎn)換成數(shù)組后再對(duì)數(shù)組進(jìn)行 sort 排序,abcd 和 bdca 使用 sort 排序后會(huì)變成 abcd,將拍好序的字符串作為對(duì)象的 key 來保存排序一致的字符串。
其實(shí)兩種方法的原理都是通過將字符轉(zhuǎn)換成 Unicode 編碼,只是方法1是顯式的轉(zhuǎn)換,而方法2中用到的 sort 排序,會(huì)隱式的轉(zhuǎn)換。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/85462.html
摘要:先去空白,去掉空白之后取第一個(gè)字符,判斷正負(fù)符號(hào),若是英文直接返回,若數(shù)字則不取。回文數(shù)題目描述判斷一個(gè)整數(shù)是否是回文數(shù)。回文數(shù)是指正序從左向右和倒序從右向左讀都是一樣的整數(shù)。 JS算法題之leetcode(1~10) 前言 一直以來,前端開發(fā)的知識(shí)儲(chǔ)備在數(shù)據(jù)結(jié)構(gòu)以及算法層面是有所暫缺的,可能歸根于我們的前端開發(fā)的業(yè)務(wù)性質(zhì),但是我認(rèn)為任何的編程崗位都離不開數(shù)據(jù)結(jié)構(gòu)以及算法。因此,我作為...
摘要:準(zhǔn)備面試,多看點(diǎn)題。來自雨夜帶刀需求描述從一組有序的數(shù)據(jù)中生成一組隨機(jī)并且不重復(fù)的數(shù),類似于簡單的抽獎(jiǎng)程序的實(shí)現(xiàn)。 (準(zhǔn)備面試,多看點(diǎn)題。來自雨夜帶刀s Blog) 需求描述:從一組有序的數(shù)據(jù)中生成一組隨機(jī)并且不重復(fù)的數(shù),類似于簡單的抽獎(jiǎng)程序的實(shí)現(xiàn)。 先來生成一個(gè)有序的數(shù)組: var arr = [], length = 100, i = 0; for( ; i < length;...
摘要:響應(yīng)由三個(gè)部分組成,分別是狀態(tài)行消息報(bào)頭響應(yīng)正文。詳情參考小汪之前寫的文章瀏覽器內(nèi)核之解釋器和模型解釋解釋過程是指從字符串經(jīng)過解釋器處理后變成渲染引擎內(nèi)部規(guī)則的表示過程。 showImg(https://segmentfault.com/img/remote/1460000016404846); 前言 小汪最近在看【W(wǎng)ebKit 技術(shù)內(nèi)幕】一書,說實(shí)話,這本書寫的太官方了,不通俗易懂。...
摘要:棧被稱為一種后入先出的數(shù)據(jù)結(jié)構(gòu)。散列使用的數(shù)據(jù)結(jié)構(gòu)叫做散列表。這些操作需要求助于其他數(shù)據(jù)結(jié)構(gòu),比如下面介紹的二叉查找樹。 前言 在過去的幾年中,得益于Node.js的興起,JavaScript越來越廣泛地用于服務(wù)器端編程。鑒于JavaScript語言已經(jīng)走出了瀏覽器,程序員發(fā)現(xiàn)他們需要更多傳統(tǒng)語言(比如C++和Java)提供的工具。這些工具包括傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)(如鏈表,棧,隊(duì)列,圖等),...
摘要:給定一個(gè)整數(shù),將其轉(zhuǎn)為羅馬數(shù)字。字符數(shù)值例如,羅馬數(shù)字寫做,即為兩個(gè)并列的。通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。注意空字符串可被認(rèn)為是有效字符串。 JS算法題之leetcode(11~20) showImg(https://segmentfault.com/img/bVbwmfg?w=1790&h=714);這次的十道題目都比較容易,我們簡...
閱讀 3199·2021-11-10 11:36
閱讀 3145·2021-11-02 14:39
閱讀 1726·2021-09-26 10:11
閱讀 4929·2021-09-22 15:57
閱讀 1685·2021-09-09 11:36
閱讀 2053·2019-08-30 12:56
閱讀 3487·2019-08-30 11:17
閱讀 1702·2019-08-29 17:17