第一题 重复的子字符串
题目描述:
https://leetcode.cn/problems/repeated-substring-pattern/
思路:
具体代码如下:
from typing import List
class Solution:
def getNext(self, next : List[str], s: str):
next[0] = 0
j = 0
for i in range(1, len(s)):
while j >= 0 and s[i] != s[j]:
j = next[j-1]
if s[i] == s[j]:
j += 1
next[i] = j
def repeatedSubstringPattern(self, s: str) -> bool:
if len(s) == 0:
return False
next = [0] * len(s)
self.getNext(next, s)
if next[-1] != 0 and len(s) % (len(s) - next[-1]) == 0:
return True
return False
if __name__ == '__main__':
solution = Solution()
s = "abab"
print(solution.repeatedSubstringPattern(s))
第二题 找出字符串中第一个匹配项的下标
题目描述:
https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/
思路:
具体代码如下:
class Solution:
def getNext(self, next : List[str], s: str):
next[0] = 0
j = 0
for i in range(1, len(s)):
while j > 0 and s[i] != s[j]:
j = next[j-1]
if s[i] == s[j]:
j += 1
next[i] = j
def strStr(self, haystack: str, niddle: str) -> int:
if len(niddle) == 0:
return 0
next = [0] * len(niddle)
self.getNext(next, niddle)
j = 0
for i in range(len(haystack)):
while j > 0 and haystack[i] != niddle[j]:
j = next[j-1]
if haystack[i] == niddle[j]:
j += 1
if j == len(niddle) :
return i - len(niddle) + 1
return -1