KMP - wenzhoullq/leetcode GitHub Wiki

分析

先学前缀数组和后缀数组,再学kmp kmp

oiwiki解释的很清楚

模板

 int len = s.length();
        int[] dp = new int[len];//前缀的长度
        int max =0;
        char[] str =s.toCharArray();
        for(int i = 1 ; i < len ; i++ ){//i  是子串后缀的最后一个的下标
            int j = dp[i-1];//j是字串前缀的下标
            while(j>0&&str[j]!=str[i]) j = dp[j-1];
            if(str[j]==str[i]) j++;
            dp[i] = j;
        }

题目

1316. 不同的循环子字符串

1392. 最长快乐前缀