【数据结构与算法面试宝典】15 字符串查找:为什么我最终选择了 BM 算法?
【数据结构与算法面试宝典】15 字符串查找:为什么我最终选择了 BM 算法?(持续更新中,欢迎关注!)文章目录【数据结构与算法面试宝典】15 字符串查找:为什么我最终选择了 BM 算法?字符串查找暴力查找算法KMP 算法前缀与前缀集后缀与后缀集前后缀的最长匹配PMT 表(Partial Match Table)PMT 的用途next 数组怎么来的?next 数组的计算完整的 KMP 代码复杂度分析KMP 的优化BM 算法概念1\. 第 1 步2\. 第 2 步3\. 第 3 步4\. 第 4 步5\. 第 5 步6\. 第 6 步7\. 第 7 步suffix 和 prefix算法实现Sunday 算法思路与步骤移动规则总结思考题这一模块我会带你挖掘题目的特点,再对标不同的数据结构与算法,从而得出不同的解法。虽然只介绍一道题,但是解题的方法却有很多种,我会带你尝试从不同的角度去击破一道题。关于字符串查找,可以说是一类非常经典的面试题,它可以考察候选人多方面的技能,比如代码基本功、深度思考能力,以及知识广度等。代码基本功:需要注意各种空字符串,数组访问越界等边界的处理。深度思考能力:各种字符串查找的算法代码本身不会太长,但是需要你深入理解其原理才能正确地写代码,并且清晰地讲述思路。知识广度:字符串查找涉及很多种算法,可以借此了解候选人的知识积累。在本讲,将以一道字符串查找的面试题为引,带你深入探索“一题多解”的思考方式,有利于你掌握快速审题和解题的能力。具体来说,学完本讲你将收获:暴力搜索算法与本质KMP 算法的改进与扩展BM 算法Sunday 算法字符串查找【题目】实现 strStr() 函数。给定一个 main 字符串和一个 sub 字符串,在 main 字符串中找出 sub 字符串出现的第一个位置 (从 0 开始)。如果不存在,则返回 -1。示例 1输入: main = “hello”, sub = “ll”