import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算模板串S在文本串T中出现了多少次
     * @param S string字符串 模板串
     * @param T string字符串 文本串
     * @return int整型
     */
     public static int kmp(String S, String T) {
        // write code here
        int num=0;
        int[] next=getNext(S);
        int i=0,j=0;
        while(j<S.length()&&i<T.length()){
            if(j==-1||S.charAt(j)==T.charAt(i)){
                i++;
                j++;
            }else{
                j=next[j];
            }
            if(j>S.length()-1){
                num++;
                j=next[j];
            }
        }
        return num;
    }
    public static int[] getNext(String S){
        int[] next =new int[S.length()+1];
        int i=0;
        int j=-1;
        next[0]=-1;
        while(i<S.length()){
            if(j==-1||S.charAt(i)==S.charAt(j)){
                i++;
                j++;
                next[i]=j;
            }else{
                j=next[j];
            }
        }
        return next;
    }


}