这题前缀和后缀的定义是从头和尾计算,其实比较简单
def longestPrefix(self, s):
"""
:type s: str
:rtype: str
"""
base = 25
mod = 10**7+11177
pre = 0
tail = 0
mul = 1
res = 0
arr = [ord(c) - ord("a") for c in s] #也可以计算的时候算,降低空间复杂度
for i in range(len(s)-1): #减一是因为自身不算
pre = (pre*base + arr[i])%mod
tail = (tail + arr[len(s)-i-1] *mul)%mod
mul = mul*base%mod #乘法比幂运算节约时间
if pre == tail:
res = i + 1 #这里记录位置不要直接截取,会多出来很多时间
return s[:res]