ARTS 第 36 周

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


Contents


Algorithm

125. Valid Palindrome

题目:125. Valid Palindrome

难度:Easy

题意:Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

Note: For the purpose of this problem, we define empty string as valid palindrome.

示例 1:

Input: "A man, a plan, a canal: Panama"
Output: true

示例 2:

Input: "race a car"
Output: false

解法:

本题思路为双指针法,从字符串的首尾两头分别有一个指针,两个指针相向对字符串进行遍历,如果遇到的是非字母或数字,那么跳过,否则比较两个指针指向的字符是否一致,如果发现不一致,那么返回 False,否则继续遍历,直到左指针位置大于右指针。

需要注意的是,这里需要使用 python 中判断是否为字母或数字的函数 isalnum(),在比较两个字符是否一致的时候,因为题目不区分大小写,所以要使用 lower() 或者 upper() 将字符都转换为小写或大写来进行判断。

代码:

class Solution:
    def isPalindrome(self, s: str) -> bool:
        left, right = 0, len(s) - 1

        while left < right:
            while left < right and not s[left].isalnum():
                left += 1
            while left < right and not s[right].isalnum():
                right -= 1
            if s[left].lower() != s[right].lower():
                return False
            left += 1
            right -= 1

        return True

Review

Do These Things Before Going to Bed and You’ll Wake up Energized for Tomorrow

最近频繁在实验室和公司两地往返,睡眠质量不太好,这周碰巧在 Medium 上看到一篇讲睡眠的文章,《Do These Things Before Going to Bed and You’ll Wake up Energized for Tomorrow》。文章并不长,但结构紧凑。开头点题,中间行文流畅简洁,结尾与开头首尾呼应,读来轻松且易于记忆。

文章提供了以下几个帮助你睡得更好并且起床后感觉富有能量的技巧:

  1. 清空你的大脑
  2. 放松
  3. 洗个热水澡
  4. 晚上八点之后停止进食
  5. 花一些时间陪伴你的伴侣
  6. 让你的焦虑休息
  7. 思考自己的成就
  8. 上床之前避免社交媒体
  9. 感激一件事情

有兴趣的小伙伴可以点击链接去阅读原文,另外推荐一本讲述睡眠的书:《睡眠革命:如何让你的睡眠更高效》。

Tips

推荐一个 SQL 的刷题网站

如题,推荐一个 SQL 的刷题网站:牛客网的《数据库 SQL 实战》


Share

分享一本书

本周给大家分享我最近读的一本书,《巴黎烧了吗?》

本书是美国记者拉莱·科林斯和法国记者多米尼克·拉皮埃尔合著的一本历史书籍,也是非虚构类书籍的开拓性作品。本书讲述了 1944 年巴黎解放的全过程,为了力求翔实,作者们翻阅了堆积如山的军事资料,花费了三年时间采访了 800 多位这一历史事件的亲历者,上至盟军总司令艾森豪威尔、戴高乐将军的高级助手,下至普通士兵、巴黎市民。作为非虚构类书籍的开山之作,《巴黎烧了吗?》这本书在叙事技巧、细节挖掘和人物塑造方面,也可谓是经典中的经典。虽是历史作品,但书中情节跌宕起伏、多条叙事同时展开,读来令人手不释卷,真实的历史永远比小说电影更为引人入胜、人性也更为复杂和真实。

1944 年 8 月 25 日,在地堡「狼穴」中,阿道夫希特勒在德军总部拍着桌子气急败坏的问参谋长:“巴黎烧了吗?”而这一天,正是巴黎的解放日。自从 6 月份盟军在诺曼底登陆以来,德军节节败退,恼羞成怒的希特勒看着自己喜爱的巴黎正要一步步被盟军夺走,他决定,自己得不到的东西,毁掉也不让别人得到。于是派遣大量爆破专家前往巴黎,在卢浮宫、凯旋门、埃菲尔铁塔、巴黎圣母院各处布下大量炸药,炸药的数量之多,据说可以炸毁当时世界上一半的桥梁。同时被派遣去镇守巴黎的,还有一位以冷血和忠诚闻名的肖尔铁茨将军。可尽管希特勒三番五次地下令炸毁巴黎,然而直到他饮弹自尽,他也始终没能等到巴黎烧毁的消息。这期间究竟发生了什么?让我们一起来一探究竟。

1944 年,意大利已经投降,6 月盟军在诺曼底登陆以后,德军节节败退,眼看法国就要失守,希特勒将铁血将军肖尔铁茨派往巴黎镇守,并在军中颁布连坐法,不服从命令的军人,他们的家眷和孩子都要跟着一起受罚。与此同时,盟军的作战计划是在巴黎城外发起进攻,巴黎城内的地下组织同时起义,一举夺取巴黎的控制权。但作为总司令的艾森豪威尔又担心巴黎市内可能发生的巷战,这会给盟军带来巨大伤亡,想要放弃这一计划。作为法国领袖的戴高乐当然不愿意了,他劝说艾森豪威尔同他一起进攻巴黎,否则只好自己率领盟军中的法国部队单独进攻巴黎了。

8 月 19 日,巴黎地下组织爆发起义,德军伤亡的消息不断传到德国将军肖尔铁茨的耳朵里,同时德军总部也一遍又一遍的要求他镇压起义、摧毁巴黎。但是作为铁血将军的肖尔铁茨,这个时候却犹豫了,一方面,军人的天职和军中的连坐法让他不得不去执行命令,另一方面,面对巴黎城中大量人类文明的艺术瑰宝,肖尔铁茨也感觉痛心,面对良心的责问,他没有办法下手。肖尔铁茨陷入了深深的矛盾当中,德军的伤亡也进一步扩大。

这时候,在巴黎城外有两批人正试图劝说艾森豪威尔改变盟军的作战计划。第一批是戴高乐将军,然而他的计划却被艾森豪威尔否决了;第二批来的,却是瑞典外交官诺德琳,他曾在肖尔铁茨攻打巴黎城内起义军的时候出面调停,这次,他却是奉肖尔铁茨之命,穿越德军的防区,前往盟军驻处,告诉了艾森豪威尔一个惊天的内幕消息,而正是诺德琳和肖尔铁茨带来的这一内幕消息,改变了艾森豪威尔的作战计划,将巴黎彻底从纳粹手中解放出来:纳粹的援军正在赶来,再过 24 小时,肖尔铁茨就将不得不开始毁灭巴黎!

为什么以铁血著名的肖尔铁茨将军要「叛国」呢?实际上肖尔铁茨在见到希特勒的时候,他就已经知晓,自己的行动不过是为了发泄希特勒的怒火,纳粹败局已定,来到巴黎之后自己更是被巴黎的美丽和历史感动,所以,肖尔铁茨将军不仅告知了盟军纳粹军队即将增援的消息,还把巴黎周围德军的布防状况也一并告知,自己更是在巴黎解放之时仅仅做了象征性的抵抗,他用自己的行动保护了巴黎这座伟大的城市。

巴黎解放后,肖尔铁茨将军被俘虏,1971 年,有关方面披露了他保卫巴黎的事迹之后,他被提前释放,71 岁逝世。他的儿子在接受采访时说到:“我的父亲,是一名军人,但,他不是纳粹。”

本书细节极其丰富,人物刻画也非常精彩,非常推荐一读,你也可以了解到,非虚构类书籍也可以写得如此引人入胜。