给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
开心,今天是俺生日,简单题的话赶快完成我就能去happy了
头可断血可留,我的打卡不能断!
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
h_len = len(haystack)
n_len = len(needle)
if not n_len:
return 0
for i in range(h_len-n_len+1):
if haystack[i] == needle[0]:
if n_len == 1:
return i
for j in range(1, n_len):
if haystack[i+j] != needle[j]:
break
if j == n_len-1:
return i
return -1
采用了最暴力简单的方法,水平仅限于此
但是应该还可以调用内置函数?但是又感觉与出题的初衷相悖
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
return haystack.find(needle)
酱紫,但是这就没啥意思了吧哈哈
看到别人解答里的KMP算法
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
a=len(needle)
b=len(haystack)
if a==0:
return 0
next=self.getnext(a,needle)
p=-1
for j in range(b):
while p>=0 and needle[p+1]!=haystack[j]:
p=next[p]
if needle[p+1]==haystack[j]:
p+=1
if p==a-1:
return j-a+1
return -1
def getnext(self,a,needle):
next=['' for i in range(a)]
k=-1
next[0]=k
for i in range(1,len(needle)):
while (k>-1 and needle[k+1]!=needle[i]):
k=next[k]
if needle[k+1]==needle[i]:
k+=1
next[i]=k
return next
看不懂。。。那个什么最长相同前后缀就要搞死我了
希望哪个闲暇的大佬指导我一下!