亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

zhjx922 / 2009人閱讀

摘要:來自雨夜帶刀需求描述從一組數組中找出一組按不同順序排列的字符串的數組元素。最后用編碼和作為對象的來保存編碼和一致的字符串。方法方法是將字符串轉換成數組后再對數組進行排序,和使用排序后會變成,將拍好序的字符串作為對象的來保存排序一致的字符串。

(準備面試,多看點題。來自雨夜帶刀"s Blog )

需求描述:從一組數組中找出一組按不同順序排列的字符串的數組元素。假如有這樣一個數組:

[ "abcd", "hello", "bdca", "olleh", "cadb", "nba", "abn", "abc" ]

需要找出的結果是:

[ "abcd", "bdca", "cadb" ]

那么這里的關鍵點是判斷一組字符串是否是否只是字符的順序不同,只要解決整個關鍵點其他都好辦了。

方法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;

        // 將單個的字符轉換成 Unicode 編碼
        // 對編碼進行取和計算
        for( j = 0; j < strLength; j++ ){
            num += item.charCodeAt( j );
        }      

        if( !firstItem ){
            firstItem = item;
            obj[ num ].push( item );
        }
                // 通過檢測待添加的字符串的第一個字符是否
                // 在另一個字符串中出現以避免將下面的情況
                // [ "ad", "da", "bc" ]
        else if( ~firstItem.indexOf(item.charAt(0)) ){
            obj[ num ].push( item );
        }
    }

    for( name in obj ){
        console.log( obj[name] );
    }
}; 

方法1采用了遍歷字符串中的每一個字符,然后將單個的字符轉換成 Unicode 編碼,對編碼進行取和的計算,abcd 和 bdca 的編碼和會是一致的。最后用編碼和作為對象的 key 來保存編碼和一致的字符串。

方法 1 需要注意的是,字符串“ad”和“bc”的 Unicode 編碼和是一樣的,此時需要多加一個判斷,檢測任意一個字符串中的第一個字符是否有出現在另一個字符串中出現過即可。

方法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是將字符串轉換成數組后再對數組進行 sort 排序,abcd 和 bdca 使用 sort 排序后會變成 abcd,將拍好序的字符串作為對象的 key 來保存排序一致的字符串。

其實兩種方法的原理都是通過將字符轉換成 Unicode 編碼,只是方法1是顯式的轉換,而方法2中用到的 sort 排序,會隱式的轉換。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/85462.html

相關文章

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

    摘要:先去空白,去掉空白之后取第一個字符,判斷正負符號,若是英文直接返回,若數字則不取?;匚臄殿}目描述判斷一個整數是否是回文數?;匚臄凳侵刚驈淖笙蛴液偷剐驈挠蚁蜃笞x都是一樣的整數。 JS算法題之leetcode(1~10) 前言 一直以來,前端開發(fā)的知識儲備在數據結構以及算法層面是有所暫缺的,可能歸根于我們的前端開發(fā)的業(yè)務性質,但是我認為任何的編程崗位都離不開數據結構以及算法。因此,我作為...

    SoapEye 評論0 收藏0
  • JavaScript算法題之–隨機數生成

    摘要:準備面試,多看點題。來自雨夜帶刀需求描述從一組有序的數據中生成一組隨機并且不重復的數,類似于簡單的抽獎程序的實現。 (準備面試,多看點題。來自雨夜帶刀s Blog) 需求描述:從一組有序的數據中生成一組隨機并且不重復的數,類似于簡單的抽獎程序的實現。 先來生成一個有序的數組: var arr = [], length = 100, i = 0; for( ; i < length;...

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

    摘要:響應由三個部分組成,分別是狀態(tài)行消息報頭響應正文。詳情參考小汪之前寫的文章瀏覽器內核之解釋器和模型解釋解釋過程是指從字符串經過解釋器處理后變成渲染引擎內部規(guī)則的表示過程。 showImg(https://segmentfault.com/img/remote/1460000016404846); 前言 小汪最近在看【WebKit 技術內幕】一書,說實話,這本書寫的太官方了,不通俗易懂。...

    MAX_zuo 評論0 收藏0
  • JavaScript數據結構和算法

    摘要:棧被稱為一種后入先出的數據結構。散列使用的數據結構叫做散列表。這些操作需要求助于其他數據結構,比如下面介紹的二叉查找樹。 前言 在過去的幾年中,得益于Node.js的興起,JavaScript越來越廣泛地用于服務器端編程。鑒于JavaScript語言已經走出了瀏覽器,程序員發(fā)現他們需要更多傳統(tǒng)語言(比如C++和Java)提供的工具。這些工具包括傳統(tǒng)的數據結構(如鏈表,棧,隊列,圖等),...

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

    摘要:給定一個整數,將其轉為羅馬數字。字符數值例如,羅馬數字寫做,即為兩個并列的。通常情況下,羅馬數字中小的數字在大的數字的右邊。給定一個羅馬數字,將其轉換成整數。注意空字符串可被認為是有效字符串。 JS算法題之leetcode(11~20) showImg(https://segmentfault.com/img/bVbwmfg?w=1790&h=714);這次的十道題目都比較容易,我們簡...

    CoderDock 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<