每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章

题图:macOS Wallpaper

Contents

Algorithm

205. Isomorphic Strings

题目:205. Isomorphic Strings

CategoryDifficultyLikesDislikes
algorithmsEasy1750434

Tags: hash-table

Companies: linkedin

题意:

Given two strings s and t, determine if they are isomorphic.

Two strings are isomorphic if the characters in s can be replaced to get t.

All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself.

示例 1:

Input: s = "egg", t = "add"
Output: true

示例 2:

Input: s = "foo", t = "bar"
Output: false

示例 3:

Input: s = "paper", t = "title"
Output: true

Note: You may assume both s and t have the same length.

解法:

这道题题意可能稍微有点难以理解,意思就是一个字符串是否可以通过以固定的方式替换其中的字符来获得另外一个字符串。我们可以将这种固定的替换理解为某种映射,这样就相对好理解一些,同时也可以很快想到使用 Python 中的字典来解决问题。

注意题中给的限制条件:No two characters may map to the same character. 那么这样就有两种不满足题意的形式,即一对多和多对一的情况。一对多就是说这个映射中出现了一个字符同时映射到两个不同的字符的情况,而多对一就是两个不同的字符映射到了同一个字符。我们可以分别对这两种情况进行排除。

首先我们挨个对 s 中的字符进行映射处理,映射到 t 对应位置的字符,同时对 t 中对应位置的字符进行存储处理。

代码:

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        dict1 = {}
        val = ""
        for i in range(len(s)):
            if s[i] not in dict1:
                if t[i] not in val:
                    dict1[s[i]] = t[i]
                    val += t[i]
                else:
                    return False
            else:
                if t[i] != dict1[s[i]]:
                    return False
        return True

Review

It’s Actually More Exhausting to Be Lazy Than It Is to Be Disciplined.

本周文章来自 Medium,《It’s Actually More Exhausting to Be Lazy Than It Is to Be Disciplined.》。

作者在文章中探讨了人生的意义,他举了一个电影《危险关系》中的例子。

奥德尔深夜回到家,看见他的室友梅拉妮正在一边抽着大麻一边看着电视,于是有了下面一段对话:

Ordell: Goddamn girl, you gettin’ high already? It’s just 2 o’clock!

Melanie: [chuckling] It’s that late?

Ordell: You know you smoke too much of that shit, that shit gonna rob you of your own ambition.

Melanie: Not if your ambition is to get high and watch TV…

类似的话语和态度可能很常见吧。如今很多年轻人都会说,「我的人生志愿就是吃喝玩乐」、「啊我的兴趣是 movie、foodie、wine、world travel」、「我喜欢动漫、游戏、吃饭、刷剧」诸如此类,没有一个是创造性的东西,所有的东西都是消费。因此作者在文章中表达了自己的态度:

The goal of life is not to relax on the beach, sipping mojitos all day. The purpose is to find something you love that adds value to the world.

由此我也想到了 B 站在 2020 年五四青年节那条臭名昭著的《后浪》视频中表达出的对年轻人的迎合、对消费主义与虚无主义的谄媚。今天与其说人们可以自由探索自己的兴趣,不如说得益于文明成果的层层打开,年轻人终于可以被资本主义掐着脖子把钱掏出来、消费,而没有任何时间可以留给创造。当所有东西在你 25 岁、30 岁,变得满满食之无味的时候,而且你身上狗屁也没有,在那个时候你才真正是迷茫的开始。

我们需要为这个世界创造一些价值。

Tips

推荐一个笔记应用——「浮墨笔记 flomo」

Fenng 大在微博上询问 2020 年网友们认为有趣的新产品,我无意中看见浮墨笔记创始人 lightory 的回复,顺手就去注册了个会员体验了一把。flomo 暂时还没有 APP,目前是使用 PWA 构建了全平台的应用,甚至还有 Alfred 和 Popclip App 的社区插件,你还可以使用 flomo 的微信服务号进行随时随地的记录。

根据 Notion 中文社区的 Linmi 的介绍,「flomo浮墨是一款无压笔记,一个个人版的 Twitter,一个加强版的文件传输助手 —— 其实是一个无压力记录的笔记思维工具。你可以在 flomo 随机漫步,自由记录你想法。」

flomo 手机版界面长这样:

flomo 手机版界面

flomo 提供会员制度,相比较普通用户,Pro 用户多出了「每日回顾」、「随机漫步」、API 和数据导出等特性。flomo 为学生党提供教育优惠。尤其打动我的一点是,在教育优惠的申请页面有这么一句话:

我们不会审核你的身份,因为我们希望彼此信任。我们都经历过贫穷。如果你真的手头拮据,也可以选择此选项。

我能感受到 flomo 是一款有温度且克制的软件,如果你喜欢这种古典的产品,同时又喜欢随时随地记录下一些零碎的想法或者微信中的沟通,那么你应该会喜欢 flomo。

在 flomo 的官方微信公众号下,你可以找到其关于「随机漫步」、「卡片笔记法」和「每日回顾」等特性的说明以及背后的故事。

你可以在 flomo 的官网:flomoapp.com 体验这款产品,也可以使用我的邀请链接 https://flomoapp.com/register2/?MTgxMjE 或者邀请码「MTgxMjE」获得 28 天的 flomo Pro 会员。

Share

我为什么要加入明白老师的 2021 持续行动训练营

2020 年年末,明白老师在公众号「多元思维Hack」中发布了他的 2021 年持续行动训练营的招生计划,我思索了一段时间,在咨询跃哥(公众号:程序员小跃)的建议之后,还是下定决心付费加入了训练营,算是送给自己的新年礼物。下面我来介绍一下这个训练营以及我加入这个训练营的原因。

Q: 明白老师是谁? A: 明白老师的微课《21 堂信息搜集课》中的介绍,10 年程序员,创业者,信息挖掘专家,8600+ 付费用户《不用写代码的爬虫课》作者,知识星球《刻意练习赚钱》和《累计赚钱能力(限免)》的星主,公众号「多元思维Hack」号主。

Q: 这个训练营是干什么的(目的)? A: 明白老师在训练营的介绍文章中提到四个基础能力:

1 学习能力:快速学会新知识、解决问题。

2 思考能力:从表面深入原理,从不同角度分析,根据不同条件做出假设、验证、得到结论。

3 用户视角:能找到用户的真实需求,了解用户的真实想法。

4 传递感知:让用户感知到产品价值,并愿意付费。

那么训练营就是针对性地对学员的这个四个能力进行训练,指导学员在一段时间内提升这些能力。

Q: 平时怎么训练? A: 介绍文章中提到提升能力的三个环节分别是:

  1. 教:我们最常做的读书、学习、听课等
  2. 练:就是练习,大量练习,重复练习
  3. 教练:在练习过程中遇到问题,教练帮忙指出来,然后继续练

那么训练营就是按照这个思路来的,也即:输入思考写作 + 教练指导。

这 1 年时间里,会以读书为主线,我选出一些对大部分人都有帮助的书,然后每天一起读一部分,读完之后要输出。

注意,这不是简单的写读书笔记。我会根据每天的读书内容,设计作业。作业就是一系列问题,大家需要回答问题,然后梳理成一篇文章。

Q: 时间多长? A: 一年。

Q: 为什么我要加入这个训练营? A: 在我写完上一篇 2020 年终总结之后,我发现其实自己也读书也不算少(17 本),但为什么一到输出或者应用的时候总有些或多或少的问题呢?这个问题在其他方面也有些体现,比如学习了 GTD 工作法,但很难将 GTD 灵活应用到自己的学习工作中去,类似的还有番茄工作法、思维导图等等。工作生活学习,方法和工具都是其次,核心是人。我思前想后,发现自己其实只是机械性地读书,真正理解的不多,能应用的就更少了。去年法国封城时期,我在家阅读张辉老师的《人生护城河》,采用过仔仔细细阅读 + 每天在微博输出想法的方式,收获颇多,但一解封,我就没有耐心和心境继续这样细读下去了。参加训练营,我希望可以在读书的基础上,长期并且大量地进行思考和写作,对自己的输入和输出这一流程进行刻意练习,再加上有明白老师这个前辈的指导,我会解决刚刚提到的输出和应用问题,我的成长速度也会更快。

以上就是我为什么要加入明白老师的训练营的原因,希望在 2021 年自己能有更多的改变和成长,学习能力、思考能力、底层逻辑和认知水平都有长足的长进。

2021,和你们一起见证。

WeChat QRCode