国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript算法題之–查找不同順序排列的字符串

zhjx922 / 1957人閱讀

摘要:來自雨夜帶刀需求描述從一組數(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

相關(guān)文章

  • JS算法題之leetcode(1~10)

    摘要:先去空白,去掉空白之后取第一個(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)以及算法。因此,我作為...

    SoapEye 評(píng)論0 收藏0
  • JavaScript算法題之–隨機(jī)數(shù)生成

    摘要:準(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;...

    tigerZH 評(píng)論0 收藏0
  • 面試題之從敲入 URL 到瀏覽器渲染完成

    摘要:響應(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í)話,這本書寫的太官方了,不通俗易懂。...

    MAX_zuo 評(píng)論0 收藏0
  • JavaScript數(shù)據(jù)結(jié)構(gòu)和算法

    摘要:棧被稱為一種后入先出的數(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ì)列,圖等),...

    EastWoodYang 評(píng)論0 收藏0
  • JS算法題之leetcode(11~20)

    摘要:給定一個(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);這次的十道題目都比較容易,我們簡...

    CoderDock 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<