LeetCode #28:Implement Strstr(实现StrStr库函数) 题目描述 本题实际上就是实现字符串匹配的 KMP 算法。与暴力匹配算法不同,KMP 算法在匹配模式串时主串的指针不会回溯。实现 KMP 算法的关键是求 next 数组,笔者在生成 next 数组时采用了将前缀表整体左移、next[0] 赋值 -1 的策略(如模式串为aabaaf,生成的 next 数组为 {-1, 0, 1, 0, 1, 2}),这样若模式串在 j 处不匹配时就通过 j = next[j] 回溯。 阅读全文
LeetCode #18:Four Sum(四数之和) 题目描述 本题的思路和 “三数之和” 完全一致,只需要在其基础上多套一层循环即可(理论上五数之和、六数之和都能通过加一层循环实现)。此外,由于 target 不再是 0,有一些额外的细节要注意。 阅读全文
LeetCode #15:Three Sum(三数之和) 题目描述 首先将数组排序,然后通过一层 for 循环枚举数组元素,i 从下标 0 的地方开始,同时定义指针 left 在 i+1 的位置上,定义指针 right 在数组结尾的位置上。 阅读全文
LeetCode #151:Reverse Words In A String(颠倒字符串中的单词) 题目描述 本题是使用双指针(快慢指针法)的一道综合性问题。首先通过快慢指针对字符串中多余的空格进行清除,随后要对整个串进行一次反转操作,再要通过快慢指针来界定单词的边界,最后要对串中每一个单词再进行反转。 阅读全文