LeetCode10——实现 strStr()
前言:
题目内容:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-strstr
python实现:
方法一:
class Solution(object):
def strStr(self, haystack, needle):
"""
:type haystack: str
:type needle: str
:rtype: int
"""
return haystack.find(needle)
if __name__ == '__main__':
haystack = "hello"
needle = "ll"
a = Solution()
print(a.strStr(haystack,needle))
方法二:
class Solution(object):
def strStr(self, haystack, needle):
"""
:type haystack: str
:type needle: str
:rtype: int
"""
n = len(haystack) - len(needle) # 最大需要遍历的字符数
for i in range(n + 1):
if haystack[i:i + len(needle)] == needle:
return i
return -1
if __name__ == '__main__':
haystack = "hello"
needle = "ll"
a = Solution()
print(a.strStr(haystack,needle))
方法三:
class Solution(object):
def strStr(self, haystack, needle):
"""
:type haystack: str
:type needle: str
:rtype: int
"""
if needle == '':
return 0
r = haystack.split(needle)
#print(r)
if len(r) == 1:
return -1
# print(r[0])
return len(r[0])
if __name__ == '__main__':
haystack = "hello"
needle = "ll"
a = Solution()
print(a.strStr(haystack,needle))
方法四:
def gen_pnext(needle):
"""
构造临时数组pnext
"""
index, m = 0, len(needle)
pnext = [0] * m
i = 1
while i < m:
if (needle[i] == needle[index]):
pnext[i] = index + 1
index += 1
i += 1
elif (index != 0):
index = pnext[index - 1]
else:
pnext[i] = 0
i += 1
return pnext
class Solution(object):
def strStr(self, haystack, needle):
"""
:type haystack: str
:type needle: str
:rtype: int
"""
pnext = gen_pnext(needle)
n = len(haystack)
m = len(needle)
i, j = 0, 0
while (i < n) and (j < m):
if (haystack[i] == needle[j]):
i += 1
j += 1
elif (j != 0):
j = pnext[j - 1]
else:
i += 1
if (j == m):
return i - j
else:
return -1
if __name__ == '__main__':
haystack = "hello"
needle = "ll"
a = Solution()
print(a.strStr(haystack,needle))