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


Contents:


Algorithm

28. Implement strStr()

题目:28. Implement strStr()

难度:Easy

题意:实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从 0 开始)。如果不存在,则返回 -1

示例一:

Input: haystack = "hello", needle = "ll"
Output: 2

示例二:

Input: haystack = "aaaaa", needle = "bba"
Output: -1

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0。这与 C 语言的 strstr() 以及 Java的 indexOf() 定义相符。

解法:

本题实现了 Python 字符串的内置函数 find()的功能,思路比较直接,直接循环读取 haystack 的每一个字符,如果从这个字符开始的 len(needle) 个长度的字符串都与 needle 相同,那么返回当前的位置,否则返回 -1。

代码:

使用切片操作:

class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """

        for i in range(len(haystack) - len(needle) + 1):
            if haystack[i:i + len(needle)] == needle:
                return i
        return -1

不使用切片操作:

class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        if not needle:
            return 0

        def helper(i):
            haystack_p = i
            needle_q = 0
            while needle_q < len(needle):
                if haystack[haystack_p] != needle[needle_q]:
                    return False
                else:
                    haystack_p += 1
                    needle_q += 1
            return True

        for i in range(len(haystack) - len(needle) + 1):
            if helper(i):
                return i
        return -1

时间复杂度 O((M-N)N),这里 M 为 haystack 的长度,N 为 needle 的长度,再乘以一个 N 是因为切片操作或者 helper() 需要 len(needle) 次操作;空间复杂度为 O(1)。


Review

12 Things I Learned During My First Year as a Machine Learning Engineer

这周阅读了一篇 Medium 推送的文章,作者描述了他作为一个机器学习工程师的第一年中学到的 12 件事,文章语言比较口语化,有些句子的意思需要推测,阅读起来有些挑战。


Tips

Vim 插入模式中的一些小技巧

以上这些快捷键可以用在很多地方,比如终端。


Share

最近的一些感想

这周结束休假,从国内回到法国。回国这段时间,对国内的行情了解了不少,但是同样也看到了很多其他的可能性,太多的信息反到让我有些迷茫。回来的前一天晚上,我和@天涯 聊了不少,让我对于眼前的困惑释然了许多,我需要静下心来,把看到的可能性都想清楚想明白,就像采铜在《精进》中提供的分析方法一样,根据自己的真实需求对每一个选择的各个方面进行考量。

另外这次回国让我明白了一点,真正决定你生活质量的,不是外在的环境,而是自己的心态,所以我决定重新拾起积极的态度,从小事做起,用行动来改变心态,从而能达到改变生活质量的目的。