ARTS Week 2
Algorithm 本周的算法题为 49. 字母异位词分组 - 力扣(LeetCode) 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [["bat"],["nat","tan"],["ate","eat","tea"]] 实现代码如下所示: let strs = ["eat", "tea", "tan", "ate", "nat", "bat"] var groupAnagrams = function (strs) { let sortedStrs = [] strs.forEach(str => { let sortedStr = str.split("").sort().join(""); sortedStrs.push(sortedStr) }) let categories = {} sortedStrs.forEach((str, index) => { if (categories[str]) { categories[str].push(strs[index]) } else { categories[str] = [strs[index]] } }) let result = [] for (const key in categories) { result.push(categories[key]) } return result } groupAnagrams(strs) 解题思路: 通过查看示例1的输出数组得知,相同字母但顺序可以不一样,所以我们可以考虑,将各元素重新排序,那么就可以知道哪些元素是相同的。首先,先遍历 strs 数组,使用 split("") 将字符串str分割为字符数组,然后使用 sort() 对字符数组进行排序,最后使用 join("") 将排序后的字符数组拼接为字符串。 sortedStrs 其值如下: [ 'aet', 'aet', 'ant', 'aet', 'ant', 'abt' ] 然后开始将 sortedStrs 中的元素进行分类,将相同元素归入同一个数组中,使用对象key的唯一性进行实现,遍历 sortedStrs ,将元素作为对象 categories 的key值,如果key没有存在,则生成新的key,并将元素自身添加至value数组中,如果已存在,则将元素添加至value数组中。在以下代码中,如果 sortedStrs 中有相同的元素,则加入到 categories[str] 数组中,但是因为 sortedStrs 是排序后的数据,虽然元素被排序了,但是下标 index 是不变的,所以就 push 原数组 strs 相同下标的元素。因为如下所示: ...