刷題——字母異位詞分組

題目描述

給定一個字符串數組,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字符串。
示例:

輸入:[“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
輸出:
[
[“eat”, “tea”, “ate”],
[“tan”, “nat”],
[“bat”]
]

說明:

所有輸入均爲小寫字母。
不考慮答案輸出的順序。

思路分析

此題主要考察對字典操作的應用。ES6中引入了MAP數據解構,我們用它來解這道題目。
算法流程:確定單詞所包含字母組合——搜索是否已在字典中——是,放入對應鍵下;否,創造新的鍵,並賦值。

js代碼

function merge(arr) {
    let m = new Map();

    arr.forEach(item => {
        let key = item.split('').sort().join('');
        if(m.has(key)){
            let value = m.get(key);
            [].push.call(value, item);
        }
        else{
            m.set(key, [item]);
        }
    });

    return Array.from(m.values());
}

let input = ["eat", "tea", "tan", "ate", "nat", "bat"];
let output = merge(input);
console.log(output);

控制檯打印結果如下:
在這裏插入圖片描述
這裏需要注意兩點:

  1. 存儲在MAP結構中的值雖然像數組,但是沒有數組的方法,所以需要通過call方法來爲其添加元素。
  2. MAP結構中的值是數組,引用類型,所以直接爲value添加元素即可,不需要再使用set方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章