#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 计算模板串S在文本串T中出现了多少次
# @param S string字符串 模板串
# @param T string字符串 文本串
# @return int整型
#
class Solution:

    
    def kmp(self , S , T ):
        def get_next(p):
            n = [-1] * (len(p)+1) // 并行多加1,因为需要匹配多次
            k = -1
            j = 0
            while j < len(p):
                if k == -1 or p[j] == p[k]:
                    k +=1
                    j +=1
                    n[j] = k
                else:
                    k = n[k]


            return n
        
        next_arr = get_next(S)
        j = 0
        result = 0
        i = 0
        while i < len(T):
            if j == -1 or T[i] == S[j]:
                i +=1
                j +=1
            else:
                j = next_arr[j]
                
            if j == len(S):
                result +=1
                j = next_arr[j]
            
                
        return result