首页 > 编程语言 >力扣(leetcode) 28. 实现 strStr() (一行代码解决问题) KMP算法解法待更新!!!!!!

力扣(leetcode) 28. 实现 strStr() (一行代码解决问题) KMP算法解法待更新!!!!!!

时间:2022-10-27 20:03:23浏览次数:48  
标签:strStr 匹配 needle 28 len 力扣 模式 return haystack


题目在这:https://leetcode-cn.com/problems/implement-strstr/

法一:

思路分析:
Python find() 方法:
检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。

如果仅仅是为了完成本题交作业,完全可以直接用这个方法。

代码只需要一行:

return haystack.find(needle)

力扣(leetcode) 28. 实现 strStr() (一行代码解决问题) KMP算法解法待更新!!!!!!_python


实际上我们刷leetcode是为了面试或者提高自己的算法能力。那么直接用方法是不可取的,本题目的锻炼字符串匹配算法思维。

法二:

思路分析: 我们可以直接使用两层循环进行暴力匹配完成本题。
题中给定的两个字符串:haystack = “hello”,和 needle = “ll”
拿needle去haystack里匹配。
这里我们称haystack为主串。needle称为模式串。

首先,当模式串长度大于主串的时候,肯定是匹配失败的,也就是说没办法从主串中找到子串等于所给的模式串。
当模式串为空时,返回 0

if len(needle) > len(haystack) :
return -1
elif len(needle) == 0:
return 0

我们使用两层循环进行匹配,外层循环主串,内层循环模式串。
1. 当模式串没有匹配完,但主串已经匹配完的时候,匹配失败。
2. 当模式串当前位置不等于主串当前位的时候,匹配失败。
3. 当模式串匹配完了,此时匹配成功。

我们将上面三句话翻译成代码:

第一句话:

if j != len(needle)-1 and i ==len(haystack)-1:
return -1

第二句话:

if haystack[i] != needle[j]:
break

第三句话:

if j == len(needle)-1:
return

最后,如果主串都遍历完了也没有找到模式串,则返回-1:

if i == len(haystack)-1:
return -1

完整代码:

haystack = "hello"
needle = "ll"
if len(needle) > len(haystack) :
return -1
elif len(needle) == 0:
return 0
temp = 0
for i in range(len(haystack)):
j = 0
if haystack[i] == needle[j]:
temp = i
while True:
if j != len(needle)-1 and i ==len(haystack)-1:
return -1
elif j == len(needle)-1:
return temp
i +=1
j +=1
if haystack[i] != needle[j]:
break
if i == len(haystack)-1:
return -1

力扣(leetcode) 28. 实现 strStr() (一行代码解决问题) KMP算法解法待更新!!!!!!_子字符串_02

法三:

使用KMP算法进行字符串匹配,我学的也是一知半解,所以先不更这块,我先去学一下,学会了再回来。。。。。


标签:strStr,匹配,needle,28,len,力扣,模式,return,haystack
From: https://blog.51cto.com/u_15849381/5801749

相关文章