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
相同下标的元素。因为如下所示:
sortedStrs.forEach((str, index) => {
if (categories[str]) {
categories[str].push(strs[index])
} else {
categories[str] = [strs[index]]
}
})
至此,我们可以得到categories
的值,如下所示:
{
aet: ['eat', 'tea', 'ate'],
ant: ['tan', 'nat'],
abt: ['bat']
}
然后通过遍历 categories
对象,将其值加入新的数组result
即可完成,如下所示:
[ [ 'eat', 'tea', 'ate' ], [ 'tan', 'nat' ], [ 'bat' ] ]
Review
Why Reading Is Part of Success | by Kevin Nokia | Medium
作者主要是说了阅读为什么可以是成功的一部分,这是因为阅读就像是和他人交流,你总能从别人身上学到一些东西。如果你平时总是很固执和虚荣,觉得自己无所不知,他人的建议置若罔闻,那么你很容易走向困境。如果你想改变这种局面,那就需要知道:
- 固执和虚荣会阻碍学习有价值的东西。
- 不要仰视任何人,不要瞧不起任何人。
- 尊重是学习的关键,这就是为什么我们需要倾听别人的声音。
- 如果你觉得听别人说话很难,那就从阅读开始吧,阅读是教你如何倾听的一个很简单的工具。
- 你可以从每天阅读5分钟开始。如果你还是觉得很难,你可以先读一分钟。
Tip
git clone -b ${1:-dev}
的意思是,将远程仓库的分支代码克隆至本地,如果有传参,则克隆传入的分支代码,如果没有传参,则默认克隆dev
分支的代码。通常项目会有设置dev
、test
、staging
和master
分支,如果想要部署不同环境时,依赖不同环境的库或项目,就会用到这个动态设置分支名称的功能。比如在install.sh
文件中,有如下示例:
git clone -b ${1:-dev} https://github.com/ar7/test.git
要在.yml
中调用,如下所示:
./install.sh ${BRANCH_NAME}
Share
人们不会去做你想让他们去做的事情,他们只会去做他们想去做的事情。
我觉得一个人只要认真做事,那么就值得肯定,哪怕结果不是很好,那我也会舍得花费时间和精力去协助和分担,因为做好一件事情本来就是很难的,有些事一个人就可以,有些事就需要团队的力量。大家互帮互助,才会走得更远。但是如果和我耍小心机,所作所为完全是为了自己,任务难点就推给别人,一有问题就先甩锅,那么太让我生气了。以前心态还会爆炸,就在想为什么会有这种人,但也只是生闷气,后来想明白了,我只需要多为厚道、认真做事的同事服务,为他们争取更多的利益,偷奸耍滑的睁一只眼闭一只眼就可以了,没必要去指责,用其所长即可。大家都是打工的,爱咋地咋地,只需要重点关注团队核心三四个人,还有剩下认真做事的人就行,其他不值得浪费任何时间。