28。实现strStr()题目来源:https://leetcode-cn.com/problems/implement-strstr题目:实现strStr()函数。给定一个haystack字符串和一个needle字符串,找到haystack字符串中第一次出现的needle字符串(从0开始)。如果不存在则返回-1。示例1:输入:haystack="hello",needle="ll"输出:2示例2:输入:haystack="aaaaa",needle="bba"输出:-1解释:当needle为空字符串时,我们What应该返回值?这是面试中要问的一个很好的问题。对于这道题,当needle为空字符串时,我们应该返回0。这与C中的strstr()和Java中的indexOf()的定义相匹配。解题思路:双指针算法:先找到haystack子串第一个字符与needle串第一个字符相同的位置,从这里开始匹配;一个一个匹配,当有不匹配的字符时,考虑回溯,将p指针重新设置为从匹配开始算起的下一位,即p-cur_len+1;重复上述过程,如果完全匹配,则返回匹配到的子串的起始坐标,即p-N;如果最后没有匹配,则返回-1。(p为haystack字符指针,q为needle字符指针,M表示haystack字符长度,N表示needle字符长度,cur_len表示字符匹配长度)具体过程为如下图所示:代码实现类Solution:defstrStr(self,haystack:str,needle:str)->int:M,N=len(haystack),len(needle)ifN==0:return0p=0whilep
